本文介绍了c ++如何使用select来查看一个套接字是否已经关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有人可以提供一个如何使用select()来查看客户端是否已关闭套接字上的连接的示例。
Can someone provide me an example of how to use select() to see if a client has closed the connection on a socket?
FYI。我正在使用linux。
FYI. I'm using linux.
谢谢!
推荐答案
snippet首先检查套接字是否被标记为可读(这是关闭时),然后如果实际上有任何要读的东西。
The below snippet first checks if the socket is marked readable (which it is when closed) and then if there's actually anything to be read.
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/ioctl.h>
bool isclosed(int sock) {
fd_set rfd;
FD_ZERO(&rfd);
FD_SET(sock, &rfd);
timeval tv = { 0 };
select(sock+1, &rfd, 0, 0, &tv);
if (!FD_ISSET(sock, &rfd))
return false;
int n = 0;
ioctl(sock, FIONREAD, &n);
return n == 0;
}
这篇关于c ++如何使用select来查看一个套接字是否已经关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!