关于EINTR
程序被中断以后,断点重启? 从被中断的这个函数重新启动? 还是?
------解决方案--------------------应该是从被中断的函数重新启动.
------解决方案--------------------如果被调用的函数会修改参数,从设置这些参数的语句开始,例如经典的Unix select系统调用:
for( ;; )
{
tv.tv_sec = 30;
tv.tv_usec = 0;
FD_ZERO( &rfds );
FD_SET( sockfd, &readmask );
switch( ret = select( sockfd + 1, &rfds, NULL, NULL, &tv ) )
{
case 0:
return TIMEOUT;
case -1:
if ( (errno == EINTR) )
continue;
return BROKEN;
default:
if ( FD_ISSET( sockfd, &rfds ) )
{
...
}
}
}