2011-03-14 58 views
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來解決問題嗎?

非常感謝!

回答

2

在連接終止時,所有讀/寫功能都將返回一個錯誤(只有在讀入輸入緩衝區後纔開始讀取失敗)。如果您想確定爲什麼不能讀取/寫入更多數據,請檢查errno。

+0

注意,儘管可能無法及時檢測到連接終止 - 如果是這樣,一旦發送緩衝區填滿,fputc()函數就會阻塞。 – caf 2011-03-14 02:34:34

+0

的確如此,並且默認的TCP超時時間很長。但是這種情況只會發生在網絡故障時 - 當TCP終止包不能發送,數據包完全沒有迴應時。 – Basilevs 2011-03-14 02:38:11

+0

其實默認情況下程序會得到一個SIGPIPE信號並被終止而不是看到一個錯誤。 – mark4o 2011-03-14 06:25:39

相關問題