recv函数和send函数返回值错误处理

您所在的位置:网站首页 socket的errno recv函数和send函数返回值错误处理

recv函数和send函数返回值错误处理

2023-08-21 15:44| 来源: 网络整理| 查看: 265

本文中分析的都是非阻塞态的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