断管错误

ale*_*der 3 c sockets freebsd pipe

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

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

谢谢你的帮助亚历山大

小智 6

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