c++ - 面对 recv() 和 send() winsock api 的问题。 Recv() 在接收最后一个数据包时挂起

标签 c++ windows visual-c++

我遇到了 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/

相关文章:

visual-c++ - 在英特尔实感中保存 RGB 和深度图像

c++ - 并发 std::call_once 调用

linux - windows版本和linux版本有什么区别?

适用于 Windows 的 PHP 驱动的 GUI 应用程序

c - CreateSemaphore() API 中的 lmaxcount 参数有什么用?

c++ - 了解此代码中的 “Callable”对象/事物

C++ 编译器无法识别成员函数和类型

c++ - CodeLite - build设置故障

c++ - Clion 的 "Call to std::pair is ambiguous"但可以编译代码

windows - 为什么 Microsoft 选择 stdcall 作为他们的 API 约定?