recv函数和send函数返回值错误处理 |
您所在的位置:网站首页 › socket的errno › recv函数和send函数返回值错误处理 |
本文中分析的都是非阻塞态的socket错误代码,因为阻塞态也不会出现EWOULDBLOCK错误。 1、recv函数:返回值 0) { nread = recv(socket, buff, nleft,0); if(nread == 0)//对端socket调用close()关闭 { printf("%s", strerror(errno)); return -1; } if(nread < 0) { if(errno == EINTR ||errno == EAGAIN ||errno == EWOULDBLOCK) continue; printf("%s", strerror(errno)); return -1; } nleft -= nread; buff += nread; } return(length - nleft); } 如示例,recv函数是不能通过返回值来判断读满了buff个数据的,因为recv返回0表示,对端socket正常关闭了。 所以,需要通过判断未读的字节数>0?来解决这个问题。 2、send函数 int foo(SOCKET socket, char *buff, int length) { int nleft, nsend; nleft = length; while(nleft > 0) { nsend = send(socket, buff, nleft,0); if(nsend == 0)//对端socket调用close()关闭 { printf("%s", strerror(errno)); return -1; } if(nsend < 0) { if(errno == EINTR ||errno == EAGAIN ||errno == EWOULDBLOCK) continue; printf("%s", strerror(errno)); return -1; } nleft -= nsend; buff += nsend; } return(length - nleft); }3、附录 recv函数返回值及errno值
send函数errno值 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |