网络函数[09]网络发送函数解析
1 -- recv函数详解
#include <sys/socket.h> ssize_t recv(int socket, void * buffer, size_t length, int flags); 返回值: >0:读取数据成功,返回值表示本次读取数据的Byte数目; =0:表示当前套接口已没有数据可读取,并且被对端主动关闭了; -1:读取数据失败,系统设置相应errno值,具体错误原因及应对措施需参考errno;
recv函数返回-1时,需要判断errno来决定应对措施。下面我试着讲述这些errno以及产生原因。
EAGAIN or EWOULDBLOCK
产生原因:当socket被设置为非阻塞链接,并且当前套接口上没有数据可读时,产生这个错误码。
应对措施:不关闭当前链接,将该fd放入到监听队列中,等待其变为可读后,再次进行读取。