c - 处理坏文件描述符错误的方法

标签 c sockets recv

场景:
客户端和服务器之间建立连接。客户端连接关闭,客户端被销毁。在服务器端,一些关闭的连接被检测到,但有些则没有。因此,存在类似于悬空指针的套接字描述符。选择这些会返回 Bad 文件描述符错误,但不可能找到无效的 fd 。

问题: 在上述场景中,如果客户端连接不存在,我应该如何处理这些 BAD FILE DESCRIPTORs 。我可以对它们调用 recv() 吗?

最佳答案

select() 的签名是:

int select(int nfds, fd_set *restrict readfds,
           fd_set *restrict writefds, fd_set *restrict errorfds,
           struct timeval *restrict timeout);

errorfds 集不是为您提供生成错误条件的描述符列表(例如 EBADF)吗?

您可以调用 recv() 或任何其他采用错误文件描述符的文件描述符的函数;您可能会从调用的函数中返回一个 EBADF 错误(除非它在检测 EBADF 之前检测到不同的错误条件)。

关于c - 处理坏文件描述符错误的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12838041/

相关文章:

c - libevent EVLOOP_NO_EXIT_ON_EMPTY 不工作?

c - 使用具有边界条件的指针扫描二维数组

c++ - C/C++ 套接字 : IPv6 TCP connection fails if I do anything before it

.net - 如何知道要设置什么 ReceiveBufferSize?

sockets - TCP/UDP : Send packet from one machine to another on local network

c - 使用带套接字的 C 中的 I/O 从服务器接收响应

c - AIX 上 asprintf 的替代或变通方法

c - 这个 128 位整数乘法在汇编 (x86-64) 中如何工作?

C++ win客户端发送linux服务器变量

c - recv() 什么时候返回?