c - 破管错误

标签 c sockets freebsd pipe

我在 FTP 实现中的一个打开的数据套接字上使用 write() 来发送文件。但是在写入一些数据后它会挂起一段时间;然后它返回 Broken pipe 错误。对此的任何帮助将不胜感激。我的进程从一个 buff 读取数据包并写入套接字。我注意到这个问题随着带宽的增加而增加。如果我增加了要处理的数据包数量,那么问题就来了。我正在使用 FreeBSD。

我正在使用两个线程,一个读取数据包并写入缓冲区...第二个线程从缓冲区读取这些数据包并写入套接字。

谢谢你的帮助 亚历山大

最佳答案

SIGPIPE当检测到尝试将数据写入损坏的管道时,内核会将其发送到您的进程。这可能会发生,例如,如果接收方在您编写时关闭了套接字,或者套接字被另一个线程意外关闭等。这有很多可能的原因。大多数应用程序倾向于忽略此信号并根据“write”返回代码处理错误,因为在 SIGPIPE 中您无能为力。信号处理处理器。基本上,设置 SIGPIPE SIG_IGN 的处理程序以便忽略它并查看来自“write”系统调用的可能返回代码列表并相应地处理它们。

关于c - 破管错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3469567/

相关文章:

objective-c - 如何在Objective-C OpenGL中正确使用InitWindow?

无法从 'double' 转换为 'double (*)'

c - 结构和 malloc 代码得到奇怪的输出

c - 用 C 编写 shell

c - 函数获取右指针但返回 NULL

c - 使用 TCP 套接字发送字节到字节

java - PHP Socket Java 消息交换

c++ - 在 FreeBSD 系统中按进程检索内存使用情况

java - UnknownHostException 安卓客户端套接字

java - FreeBSD 上从 java 生成的进程继承父套接字