0
我TCP服務器的代碼是這樣的:套接字連接斷開連接異常時,FILE流緩衝區會發生什麼情況?
conn_fd = accept();
stream = fdopen(conn_fd...);
//...
fp = fopen(path, "r");
while ((c = getc(fp)) != EOF)
fputc(c, stream);
如果插座拔掉出於某種原因(以太網線unpluged),將fputc函數功能塊調用進程?流緩衝區會發生什麼?
如果fputc函數阻塞,我可以設置SO_SNDTIMEO來解決問題嗎?
非常感謝!
注意,儘管可能無法及時檢測到連接終止 - 如果是這樣,一旦發送緩衝區填滿,fputc()函數就會阻塞。 – caf 2011-03-14 02:34:34
的確如此,並且默認的TCP超時時間很長。但是這種情況只會發生在網絡故障時 - 當TCP終止包不能發送,數據包完全沒有迴應時。 – Basilevs 2011-03-14 02:38:11
其實默認情況下程序會得到一個SIGPIPE信號並被終止而不是看到一個錯誤。 – mark4o 2011-03-14 06:25:39