我希望立即(和单独)发送数据包,但即使在socket.send(...)之前设置socket.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)时,客户端(使用socket.recv(1024))仍会多次接收数据包。
发布于 2019-12-06 05:36:28
禁用Nagle算法只会确保写入数据不会在发送方延迟。它不会阻止多个数据包的有效负载在接收方积累。recv(1024)将尝试从读缓冲区中获取多达1024个字节,并且它不关心这些字节是在单个分组内还是在多个分组内发送的。
通常,TCP是字节流,没有隐含的消息语义。这不会通过调用一些套接字选项来改变,它仍然必须被视为字节流。您希望拥有的任何消息语义都必须在此字节流之上的应用程序中实现。
https://stackoverflow.com/questions/59203296
复制相似问题