我遇到了 recv() 和 send() winsock api 的问题。 Recv() 在接收最后一个数据包时挂起。
问题描述:-
系统 A 的应用正在通过非阻塞套接字写入数据,而系统 B 的应用正在通过阻塞套接字以 64k block 的形式接收数据。
似乎在读取可能小于或等于 64k 的最后一个 64k 数据包时,接收卡住。我不确定最后一个数据包的接收或最后一个数据包的发送是否有问题,但我在我们的遗留应用程序中间歇性地观察到这个问题。
有没有人遇到过类似的问题?如果是,请提供您的意见。
如果不是,那么您能否提供一些故障排除技术来缩小根本原因的范围。
仅供引用,我有 win2k3 服务器。
谢谢, 瓦伦
最佳答案
Wireshark是对网络代码进行故障排除的好工具。它会近乎实时地准确显示哪些数据包正在进入和离开您的网络接口(interface)。
至于您的具体问题:您是说最后一 block 数据可能小于 64k?如果是这样,您的协议(protocol)应该包含一些消息长度信息,以便接收方 知道要查找多少数据。
关于c++ - 面对 recv() 和 send() winsock api 的问题。 Recv() 在接收最后一个数据包时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1316280/