我构建UDP服务器或TCP服务器,使用recv()
或recvfrom
接收来自客户端的数据包
但在我看来,机制是:内核从网络接收数据包
并绑定IP / TCP / UDP标头,然后将数据有效负载部分放入
内核缓冲区,然后recv()
或recvfrom()
从内核缓冲区读取数据
所以这意味着缓冲区中只有字节,字节不分成几部分,每部分对应一个UDP数据报/ TCP段的有效载荷
如果我希望recv()
或recvfrom()
的每次呼叫只接收一个TCP段或UDP数据报(注意,由于IP分段,一个TCP或UDP数据包可能包含多个IP数据包)
是否有可能?
如果是这样,怎么样? 谢谢!答案 0 :(得分:1)
我希望每次调用recv()或recvfrom()只接收一个TCP段
没有。它可以返回从一个字节到你提供的长度的任何东西(或非阻塞mdoe中的零字节),并且数据可能跨越TCP段边界,而不是你有任何方式告诉TCP段边界在哪里。您必须将TCP连接视为字节流,仅此而已。
或UDP数据报
是