2012-08-22 58 views
1

我有一個程序從文件讀入,做了一些輸入工作,然後輸出到一個套接字。一個月以來,它一直運行良好,突然間我開始出現錯誤11(EAGAIN?)錯誤,導致程序無法運行。當我啓動32個程序實例時,在接收到EAGAIN消息的幾分鐘內,有一半以上會死掉。我從來沒有將文件設置爲非阻塞,除此之外,輸入文件如何阻塞,數據總是不存在?我對這段代碼所做的唯一更改是禁用sigpipe信號,以避免在套接字連接丟失時程序死機。爲什麼文件輸入在讀取時拋出EAGAIN?

原諒我沒有發佈代碼,但我無法複製和粘貼,代碼有點散開。這真的很簡單,就像在一行上打開一個文件,稍後調用readline(file,inputString)。

謝謝。

+0

你是如何處理'EAGAIN'的?它只是告訴你阻塞呼叫以某種方式中斷,你應該再次嘗試接收錯誤的操作。 –

+0

截至目前,我沒有處理它,因此程序爆炸。我更想弄清楚爲什麼一個文件讀取將需要阻止,數據總是在文件上是不是?爲什麼它不會阻止它,如果它必須,它是否默認打開爲非阻塞 – dsollen

+1

正如我所提到的'EAGAIN'只是發出,如果(我猜)read()調用被信號中斷,無法正常完成。這與文件本身無關,但可能與信號處理的變化有關。 –

回答

2

EAGAIN表示讀取已被信號中斷並且應該重新啓動。

我認爲這是SIGPIPE過去直接殺死你的程序,現在處理(即使處理什麼都不做)。

相關問題