Winsock send() 单字节传输的问题
Winsock send() issue with single byte transmissions
我遇到了令人沮丧的Windows套接字行为,我找不到任何信息,所以我想我会在这里尝试。
我的问题如下:
我有一个用作设备驱动程序的C++应用程序,与连接的串行设备通信通过串行到 TCP/IP 转换器。串行协议要求在设备和我的软件。我注意到这些小消息在启动后只发送了大约 3 次,之后它们不再实际传输(用 wireshark 检查(。一直以来,send(( 方法一直返回> 0,表示消息已复制到其发送缓冲区。我正在使用阻塞套接字。
我发现了这个问题,因为当发送缓冲区完全填满时,这个特定的驱动程序最终必须断开连接(select(( 在大约 5 小时后因此失败,但当我减小SO_SNDBUF大小时,它发生得更快(。
我检查了一下,注意到当我使用 2 字节或更大的消息调用 send 时,传输永远不会失败。
任何意见将不胜感激,我不知道如何解决这个问题。
在极少数情况下,您应该设置TCP_NODELAY,以便单独写入发送,而不是合并。但我认为你还有另一个问题。您确定您正在阅读所有被发回的内容吗?并正确行事?对我来说,这听起来像是一个应用程序协议问题。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 使用蓝牙组件将数据从Android手机传输到串行设备时出现问题
- C++中从客户端到服务器的数据传输问题
- Winsock send() 单字节传输的问题
- 在将复杂数据从主机传输到设备的简单 CUDA 代码中出现问题
- JNI-从jstring到字节的传输,从字节到字符串的传输问题
- 用c++ OpenMP和文件传输并行化.性能问题