场景:
客户端和服务器之间建立连接。客户端连接关闭,客户端被销毁。在服务器端,一些关闭的连接被检测到,但有些则没有。因此,存在类似于悬空指针的套接字描述符。选择这些会返回 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/