我遇到了令人沮丧的 Windows 套接字行为,我找不到任何信息,所以我想我会在这里尝试。
我的问题如下:
我有一个用作设备驱动程序的 C++ 应用程序,它与通过串行到 TCP/IP 转换器连接的串行设备进行通信。串行协议需要在设备和我的软件之间传递大量单字节消息。我注意到这些小消息在启动后只发送了大约 3 次,之后它们不再实际传输(用wireshark检查)。一直以来,send() 方法一直返回 > 0,表明消息已被复制到它的发送缓冲区。我正在使用阻塞套接字。
我发现了这个问题,因为当发送缓冲区完全填满时,这个特定的驱动程序最终必须断开它的连接(select() 在大约 5 小时后因此失败,但是当我减小 SO_SNDBUF 大小时它发生得更快)。
我检查了一下,发现当我用 2 个字节或更大的消息调用 send 时,传输永远不会失败。
任何输入将不胜感激,我不知道如何解决这个问题。