注意recv()如果读到数据为0,那么就表示文件结束了,如果在读的过程中遇到了中断那么会返回-1,同时置errno为EINTR。
因此判断recv的条件:
如果read返回<=0
如果==0
表示文件结束, 处理
如果<0 && errno==EINTR
表示中断,处理
否则,出错
我们举个例子:
int safe_tcp_recv (int sockfd, void *buf, int bufsize)
{int cur_len;
recv_again:cur_len = recv (sockfd, buf, bufsize, 0);//closed by clientif (cur_len == 0){TRACE_LOG ("connection closed b......
阅读全文