Linux send函数的EINTR信号处理
现在做一个测试,客户端一直循环发送数据,服务端接收数据并马上回复,但目前出现一个问题是在send数据某个次数以后,开始send的返回值为-1,EINTR == errno,,如果不理睬再次发送数据结果仍然一样,且进入死循环。代码如下:
ssize_t SP_ProcPduUtils :: writen(int fd, const void *vptr, size_t n)
{
size_t nleft, nwritten;
const char *ptr;
ptr = (char*)vptr; /* can't do pointer arithmetic on void* */
nleft = n;
while (nleft > 0) {
if ( (nwritten = write(fd, ptr, nleft)) <= 0) {
if( EINTR == errno ) {
continue;
} else {
return(nwritten); /* error */
}
}
nleft -= nwritten;
ptr += nwritten;
}
return(n);
}
我尝试过直接退出,继续接收数据-发送数据的流程,但以后发送数据都会失败。请教高手,如何处理这个问题?