【发布时间】:2021-03-26 23:29:35
【问题描述】:
我正在编写一个 TCP 代理,并希望通过设置 TCP_NODELAY 来禁用 Nagle 算法。
有两种socket:
- 来自
accept()调用的套接字。 (客户端 -> 代理) - 来自
socket()调用的套接字。 (代理 -> 服务器)
所以我想知道为这两种socket设置TCP_NODELAY的正确时间是什么时候?
我可以在accept() 或socket() 调用之后立即设置 TCP_NODELAY 吗?
我检查了man 7 tcp,但没有答案:(
【问题讨论】:
-
当然,为什么不呢?你试过了吗?我看不出有任何等待的理由。一旦您接受或连接,就和任何时候一样好。如果你需要它,大概你需要它的持续时间。
-
好吧,考虑到你需要一个套接字描述符来设置
TCP_NODELAY,所以你不能在调用accept()/@之前设置它之前 987654328@,所以显然你必须在调用它们之后设置它。一旦有了套接字描述符,您就可以在任何时间对其设置TCP_NODELAY。 -
@Remy:如果您在发送后设置 TCP_NODELAY,堆栈 (A) 是否会立即注意到 (a) 更改和 (b) 某些内容已被缓冲,因此 (B) 传输已发送的内容积累?
-
@user15972 我想这是实现定义的行为。但我怀疑它要到下一次发送才会生效。
标签: c linux sockets tcp network-programming