我在FTP实现中的已打开数据套接字上使用write()来发送文件。但在写完一些数据之后,它已经悬挂了一段时间;然后它返回Broken管道错误。任何帮助都将非常感谢。我的进程从一个buff读取数据包并写入套接字。我注意到带宽增加的问题。如果我增加了要处理的数据包数量,那么问题就出现了。我正在使用FreeBSD。
我使用两个线程,一个读取数据包并写入缓冲区......第二个线程从缓冲区读取这些数据包并写入套接字。
谢谢你的帮助 亚历山大
答案 0 :(得分:4)
SIGPIPE发送到您的进程。例如,如果接收方在您写入时已关闭套接字,或者如果套接字意外地从另一个线程关闭等,则可能会发生这种情况。有很多可能的原因。大多数应用程序倾向于忽略此信号并根据“write”返回码处理错误,因为在SIGPIPE信号处理处理程序中没有任何合理的做法。基本上,将SIGPIPE处理程序设置为SIG_IGN以便忽略它并查看“write”系统调用中可能的返回代码列表并相应地处理它们。
答案 1 :(得分:3)
EPIPE
可能被设置为错误代码,并且/或SIGPIPE
引发(取决于标志)。您的连接的远程端点可能已关闭,并且您尚未检查close / EOF事件(通常在poll
/ select
时通过读取事件返回,或返回值来自read
/ recv
)的零。