日期:2014-05-16  浏览次数:20643 次

关于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 ) )
{
...
}
}
}