我正在设计TCP服务器,我需要尽快删除half-opened connections。我每隔n
秒尝试向客户端发送一些数据,当我收到错误时,我会停止轮询它们。
它的工作正常,但我的客户每隔n
秒收到一些我发送的垃圾,必须解析它。
我想发送一个包含零字节数据的TCP段。是否可以修改TCP段头并发送某种假的SYN
或ACK
段而没有数据?
答案 0 :(得分:0)
据我所知,Linux上的系统保持活动超时是两个小时 是一种方法,是一个可以覆盖的系统范围的设置 其他应用程序,如果我将其更改为例如等一下。 - Kolyunya
在那里你也可以为每个插槽设置keepalive选项。
int true = 1;
int idle = 60;
if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &true, sizeof true) < 0
|| setsockopt(s, IPPROTO_TCP, TCP_KEEPIDLE, &idle, sizeof idle) < 0
|| setsockopt(s, IPPROTO_TCP, TCP_KEEPINTVL, &true, sizeof true) < 0 /* 1 s */
) perror("setsockopt");