你好,我试着使用下面的代码,但似乎不起作用,在
连接插座(sock)I do:

struct pollfd input_fd;
int a=1;
setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,&a,sizeof(a));
a=1;
setsockopt(sock,SOL_TCP,TCP_KEEPIDLE,&a,sizeof(a));
a=1;
setsockopt(sock,SOL_TCP,TCP_KEEPINTVL,&a,sizeof(a));
a=1;
setsockopt(sock,SOL_TCP,TCP_KEEPCNT,&a,sizeof(a));
input_fd.fd = sock;
input_fd.events = POLLIN | POLLOUT;
input_fd.revents = 0;
int p=poll(&input_fd, 1,-1);

我拔掉了远程电脑的局域网插头,但什么也没发生。这个
内核似乎正在poll syscall中休眠。需要这个吗
行为,还是缺陷?

最佳答案

设置NFD:

int p=poll(&input_fd, sock+1 ,-1);

另外,我不确定这些设置的允许范围,值得检查setsockopt的返回值。

关于c - SO_KEEPALIVE和民意调查,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9604050/

10-12 22:42