网络函数[00]函数总述
3 -- recv函数
#include <sys/socket.h> ssize_t recv(int socket, void * buffer, size_t length, int flags); 返回值: >0:读取数据成功,返回值表示本次读取数据的Byte数目; =0:表示当前套接口已没有数据可读取,并且被对端主动关闭了; -1:读取数据失败,系统设置相应errno值,具体错误原因及后续采取的应对措施需参考errno;recv的相关说明:
recv函数的作用就是"receive a message from a connected socket ",也就是在已连接的套接口上读取数据,可见它适用于TCP协议,不适合UDP协议。
recv错误原因及应对措施:
ret == -1 && errno == EAGAIN or EWOULDBLOCK
该错误码表示非阻塞的套接口上当前已没有数据可读。
这种情况下,不再尝试从该套接口上读取数据,将其放入select或者epoll中等待再次变为可读。
ret == -1 && errno == ECONNRESET
该错误码表示连接被对端强制关闭。
这种情况下,将该文件描述符从进程中移除。如果继续向对端发送数据,需要再次建立连接后发送。