0

我遇到了令人沮丧的 Windows 套接字行为,我找不到任何信息,所以我想我会在这里尝试。

我的问题如下:

我有一个用作设备驱动程序的 C++ 应用程序,它与通过串行到 TCP/IP 转换器连接的串行设备进行通信。串行协议需要在设备和我的软件之间传递大量单字节消息。我注意到这些小消息在启动后只发送了大约 3 次,之后它们不再实际传输(用wireshark检查)。一直以来,send() 方法一直返回 > 0,表明消息已被复制到它的发送缓冲区。我正在使用阻塞套接字。

我发现了这个问题,因为当发送缓冲区完全填满时,这个特定的驱动程序最终必须断开它的连接(select() 在大约 5 小时后因此失败,但是当我减小 SO_SNDBUF 大小时它发生得更快)。

我检查了一下,发现当我用 2 个字节或更大的消息调用 send 时,传输永远不会失败。

任何输入将不胜感激,我不知道如何解决这个问题。

4

1 回答 1

0

当您应该设置 TCP_NODELAY 以便单独写入而不是合并发送时,这种情况很少见。但我认为你还有另一个问题。你确定你正在阅读所有发回的东西吗?并正确地采取行动?对我来说,这听起来像是一个应用程序协议问题。

于 2013-10-09T21:35:20.023 回答