c - 发送带有修改报头的 TCP 段

标签 c linux sockets tcp ip

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

它工作得很好,除了我的客户收到一些我每n秒发送给他们的垃圾并且必须将其解析出来。

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

最佳答案

As far as I know system keep-alive timeout on linux is two hours which is way to much and is a system-wide setting which can be overwritten by other applications if I change it to e.g. one minute. – Kolyunya

您还可以在其中设置每个套接字的保活选项。

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

关于c - 发送带有修改报头的 TCP 段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20556823/

相关文章:

linux - 如何找到长度为 n 的直线

c - 两次向 Linux 内核双链表添加元素

java - 普通 Java 套接字中没有密码套件

c - Emacs 中的 Linux 内核标记

c - Linux C 套接字 UDP 服务器。 select() 没有收到任何信息

c# - 从 linux C 到 Windows C# 的套接字问题

c - 将 int 值传递给函数时发生变化

c - realloc 失败时如何释放动态数组中的指针?

C - 在多个函数中使用结构

c - 如何在 C 程序中使用 libbz2 库压缩内存缓冲区中的数据