TCP客户端 - 服务器SIGPIPE
我正在设计和测试基于TCP套接字(Internet域)的客户端服务器程序。目前,我正在我的本地机器上测试它,并且无法理解以下有关SIGPIPE的信息。
*。 SIGPIPE似乎很随机。它可以是确定性的吗?
第一个测试涉及来自客户端的单个小(25个字符)发送操作以及服务器上的相应接收。同一台机器上的相同代码是否成功运行(SIGPIPE)完全不受我的控制。失败率约为45%(非常高)。那么,我可以以任何方式调整机器以最小化这个。
**。第二轮测试是从客户端向服务器发送40000个小(25个字符)消息(总数据为1MB),然后服务器响应它实际收到的数据总大小。客户端以紧密循环方式发送数据,并且服务器上有一个SINGLE接收呼叫。它仅适用于发送的总数据的最大1200字节,并且再次存在这些非确定性的SIGPIPE,现在约为70%(非常糟糕)。
有人可以建议我的设计有一些改进(可能会在服务器上)。要求是在与服务器建立单个套接字连接之后,客户端应能够通过中等到非常高的数据量发送(每个消息再次大约25个字符)。
我有一种感觉,针对单个接收的多次发送将总是有损且非常低效。我们应该组合消息并仅在一个send()操作中发送。那是唯一的出路吗?
没有找到相关结果
已邀请:
2 个回复
锹缄
或者,您可以为套接字禁用SIGPIPE:
此外,您提到的数据量不是很高。可能有一个错误导致你的连接意外关闭,给出了一个SIGPIPE。
倾坞髓
/
上设置
标志,则会阻止
被抬起。如果确实触发了此错误,则
返回-1,
将设置为
。干净又方便。有关详细信息,请参阅
。