gpt4 book ai didi

TCP 客户端-服务器 SIGPIPE

转载 作者:可可西里 更新时间:2023-11-01 02:33:22 29 4
gpt4 key购买 nike

我正在设计和测试基于 TCP 套接字(Internet 域)的客户端服务器程序。目前,我正在我的本地机器上测试它,无法理解以下关于 SIGPIPE 的内容。

*。 SIGPIPE 随机出现。它可以是确定性的吗?

第一个测试涉及来自客户端的单个小(25 个字符)发送操作和相应的服务器接收。同样的代码,在同一台机器上运行成功与否(SIGPIPE)完全不受我的控制。失败率约为 45%(相当高)。那么,我能否以任何方式调整机器以尽量减少这种情况。

**。第二轮测试是从客户端向服务器发送 40000 条小消息(25 个字符)(总数据量为 1MB),然后服务器以实际收到的数据总大小进行响应。客户端在一个紧密的循环中发送数据,并且在服务器上有一个单一的接收调用。它仅适用于最多 1200 字节的总发送数据,而且这些非确定性 SIGPIPE 现在大约有 70%(非常糟糕)。

有人可以对我的设计提出一些改进建议吗(可能是在服务器上)。要求是在与服务器建立单个套接字连接后,客户端应能够通过中等到非常大量的数据发送(每条消息大约 25 个字符)。我有一种感觉,针对单个接收的多次发送总是有损且效率很低。我们是否应该合并消息并仅在一个 send() 操作中发送。这是唯一的出路吗?

最佳答案

当您尝试写入未连接的管道/套接字时发送 SIGPIPE。为信号安装一个处理程序将使 send() 返回一个错误。

signal(SIGPIPE, SIG_IGN);

或者,您可以为套接字禁用 SIGPIPE:

int n = 1;
setsockopt(thesocket, SOL_SOCKET, SO_NOSIGPIPE, &n, sizeof(n));

另外,你说的数据量也不是很大。可能某处存在错误导致您的连接意外关闭,并发出 SIGPIPE。

关于TCP 客户端-服务器 SIGPIPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5196971/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com