使用修改的标头发送TCP段

时间:2013-12-13 00:09:50

标签: c linux sockets tcp ip

我正在设计TCP服务器,我需要尽快删除half-opened connections。我每隔n秒尝试向客户端发送一些数据,当我收到错误时,我会停止轮询它们。

它的工作正常,但我的客户每隔n秒收到一些我发送的垃圾,必须解析它。

我想发送一个包含零字节数据的TCP段。是否可以修改TCP段头并发送某种假的SYNACK段而没有数据?

1 个答案:

答案 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");