管道损坏错误

我在FTP实现中的打开的数据套接字上使用write()来发送文件。 但在写完一些数据之后,它已经悬挂了一段时间; 然后它返回Broken管道错误。 任何帮助都将非常感谢。 我的进程从一个buff读取数据包并写入套接字。 我注意到带宽增加的问题。 如果我增加了要处理的数据包的数量,那么问题就出现了。 我正在使用FreeBSD。

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

谢谢你的帮助亚历山大

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

当您尝试写入已关闭的文件描述符时, EPIPE可能被设置为错误代码和/或SIGPIPE引发(取决于标志)。 您的连接的远程端点可能已关闭,并且您尚未检查close / EOF事件(通常在poll / select时通过读取事件返回,或者从read / recv返回零值)。