SO_KEEPALIVE和民意调查

时间:2012-03-07 15:14:33

标签: c linux sockets

您好我尝试使用以下代码,但它似乎无法正常工作 连接套接字(袜子)我做:

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 syscall中休眠。这是期望的吗? 行为,还是缺陷?

1 个答案:

答案 0 :(得分:0)

设置nfds:

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

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