我在FTP實現中的打開的數據套接字上使用write()來發送文件。但在編寫一些數據之後,它已經掛了一段時間了;之後它將返回Broken pipe錯誤。任何幫助,將不勝感激。我的進程從一個buff讀取數據包並寫入套接字。我注意到這個問題增加了帶寬。如果我增加了要處理的數據包數量,那麼問題就來了。我正在使用FreeBSD。斷管錯誤
我使用兩個線程之一讀取數據包並寫入緩衝區......第二個線程從緩衝區中讀取這些數據包並寫入套接字。
感謝您的幫助 亞歷山大
我在FTP實現中的打開的數據套接字上使用write()來發送文件。但在編寫一些數據之後,它已經掛了一段時間了;之後它將返回Broken pipe錯誤。任何幫助,將不勝感激。我的進程從一個buff讀取數據包並寫入套接字。我注意到這個問題增加了帶寬。如果我增加了要處理的數據包數量,那麼問題就來了。我正在使用FreeBSD。斷管錯誤
我使用兩個線程之一讀取數據包並寫入緩衝區......第二個線程從緩衝區中讀取這些數據包並寫入套接字。
感謝您的幫助 亞歷山大
EPIPE
可以被設置爲一個錯誤代碼,和/或SIGPIPE
上調(取決於標誌),當您試圖寫入已關閉的文件描述符。連接的遠程端點很可能已關閉,並且您尚未檢查close/EOF事件(通常在poll
/select
ing或read
/recv
的返回值爲零時通過讀取事件返回)。
您尚未提供足夠的信息來診斷問題。一個好的起點是能夠證明問題的最小可編譯代碼片段。 – 2010-08-12 15:57:18
我使用兩個線程讀取數據包並寫入緩衝區......第二個線程從緩衝區讀取這些數據包並寫入套接字。 – alexander 2010-08-12 16:25:04
我不知道你爲什麼使用線程?通常程序只是讀取和寫入,使用非阻塞IO和輪詢或選擇。線程將*工作*,但爲種族和怪異的錯誤帶來如此多的機會... – 2010-08-12 22:03:19