你好,我尝试使用下面的代码,但它似乎没有工作,在 连接插座(袜子)我做的:SO_KEEPALIVE和轮询
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插头连接到远程计算机,但什么都没发生。内核似乎在轮询系统调用中休眠。这是需要的 行为,还是缺陷?
你还对插座做了什么?只使用'socket'创建它,或者还可以监听/绑定/连接? – ugoren 2012-03-07 15:21:07
你等了多久?默认的存活超时时间为2小时。 – 2012-03-07 15:32:57
@KlasLindbäck:OP使用TCP_KEEPINTVL = TCP_KEEPIDLE = TCP_KEEPCNT = 1,除非setsockopt失败,它应该在1秒后超时(并发送最多1个探针)。 – Damon 2012-03-07 16:06:35