如果我有一个文件描述符(套接字 fd),如何检查该 fd 是否可用于读/写?在我的情况下,客户端已连接到服务器并且我们知道 fd。但是,服务器会断开套接字,有什么线索可以检查吗?
您想要fcntl()检查 fd 上的读/写设置:
#include <unistd.h>
#include <fcntl.h>
int r;
r = fcntl(fd, F_GETFL);
if (r == -1)
/* Error */
if (r & O_RDONLY)
/* Read Only */
else if (r & O_WRONLY)
/* Write Only */
else if (r & O_RDWR)
/* Read/Write */
Run Code Online (Sandbox Code Playgroud)
但这是与套接字不再连接时不同的问题。如果您已经在使用select()或者poll()那么您就快成功了。如果您在 中指定并在 中检查它,poll()将很好地返回状态。POLLERReventsrevents
如果您正在执行正常的阻塞 I/O,那么只需在读/写错误出现时对其进行处理并正常恢复即可。