1. 确认recv函数返回-1的条件 recv函数在以下情况下可能返回-1: 网络错误:例如连接被对方关闭、网络中断等。 系统资源不足:如内存不足、文件描述符耗尽等。 socket未正确设置或已损坏:如socket未初始化、已关闭或绑定错误等。 2. 检查网络连接状态 确保网络连接稳定,并且socket连接未被对方关闭。可以通过发送心跳包...
1.使用UDP协议进行心跳通信; 2.未绑定端(节点机端)发送大小为65的客户端信息结构体CLIENTDATA; 3.绑定端(主控端)在绑定节点机时,通过客户端的sockaddr地址向客户端发送主控心跳时,客户端的套接字状态正常,接收主控心跳返回-1。 问题分析: 1.最开始怀疑使用sendto、recvfrom函数的最后一个参数的变量值没有初始化...
直入正题 在前几天进行Web服务器的编写时遇到了这么一个奇怪的问题 就是在socket连接成功且在epoll触发可读事件以后recv却没有收到任何东西 返回-1 在解决后遂记录一篇博客 首先在刚开始我使用了ET非阻塞,所以在出现recv返回值为-1 且 errno等于EAGAIN时当然首先想到的就是一次没有收到这个包 循环接收即可 但当...
直入正题 在前几天进行Web服务器的编写时遇到了这么一个奇怪的问题 就是在socket连接成功且在epoll触发可读事件以后recv却没有收到任何东西 返回-1 在解决后遂记录一篇博客 首先在刚开始我使用了ET非阻塞,所以在出现recv返回值为-1 且 errno等于EAGAIN时当然首先想到的就是一次没有收到这个包 循环接收即可 但当...
recv的返回值分析 特别:返回值<0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收。 总结常见的网络异常情况 1. bind()时的address already used bind()时失败,错误码为EADDRINUSE。 原因:
在windows下当我们执行 closesocket 的操作之后,阻塞的 recv 会立即返回 -1 。 而在linux 下 当我们执行 close 操作之后 阻塞的recv 会出现不能立即返回的现象。后来在网上一搜发现很多遇到类似这种现象的情况,大致意思应该是 当socket 被动被close 的时候 进入了 “CLOSE_WAIT(被动关闭一方)” 的情况。
recv 和 recvfrom =0当返回值为0时,表示对端已经关闭了这个链接,我们应该自己关闭这个链接,即close(sockfd)。另外因为异步操作会用select或epoll做事件触发,所以: ① 如果使用select,应该使用FD_CLR(sockfd,fd_set)将sockfd清除掉,不再监听 ② 如果使用epoll,系统会自己将 sockfd 清除掉,不再进行监听。
accept():接受一个连接请求,返回一个新的 socket fd,通常用于服务器端,用于接收客户端的连接请求。 send():向 socket 发送数据。 recv():从 socket 接收数据。 close():关闭 socket 连接。 Socket API 的使用通常可以分为以下几个步骤: 创建套接字:使用 socket() 函数创建一个新的 socket fd。
首先阻塞接收的recv有时候会返回0,这仅在对端已经关闭TCP连接时才会发生。而当拔掉设备网线的时候,recv并不会发生变化,仍然阻塞,如果在这个拔网线阶段,socket被关掉了,后果可能就是recv永久的阻塞了。所以一般对于阻塞的socket都会用setsockopt来设置recv超时。当超时时间到达后,recv会返回错误,也就是...