c - SO_KEEPALIVE 和轮询

标签 c linux sockets

你好,我尝试使用下面的代码,但它似乎不起作用,在 我做的连接套接字( socks ):

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); 

我将 LAN 插头拔到远程计算机上,但没有任何反应。这 内核似乎在 poll 系统调用中休眠。这是想要的吗 行为,还是缺陷?

最佳答案

设置 nfds:

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

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

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

相关文章:

c - 如何使用 C 在不影响其他位的情况下替换位域中的位

linux - 单声道中的英特尔 CPU OpenCL 被 SIGXCPU (Ubuntu) 杀死

c - 了解 Linux 中的堆栈

sockets - 使用辅助 IP 地址连接套接字

c - 在 C 中通过 UDP UNIX 套接字发送结构

c++ - 如何通过对代码进行基准测试来计算 std dev、quartile 等?

c - 如何为宏分配内存?

c - 有符号整数类型及其对应的无符号整数类型

linux - 如何在 Perl 的 system() 中使用 shell 的进程替换?

c - 存储客户端结构并随后使用它