我已經寫在C AF_INET
/SOCK_STREAM
服務器上的Android/Linux上運行,看起來更礦石較少這樣後立即:「連接重置」如果服務器調用close()寫()
...
for (;;) {
client = accept(...);
read(client, &message, sizeof(message));
response = process(&message);
write(client, response, sizeof(*response));
close(client);
}
據我所知,關閉調用不應立即終止與客戶端的連接,但它顯然確實如此:客戶端在有機會讀取服務器的響應之前報告「連接重置」。
如果我在write()
和close()
之間插入延遲,客戶端可以按預期讀取響應。
我得到了一個暗示,它可能與SO_LINGER
選項做的,但我檢查了它的價值和struct苟延殘喘的成員(l_onoff
,l_linger
)具有零值。
任何想法?
我懷疑這是發生了什麼事。 +1來捕捉這種可能性,並就如何調試情況提供很好的建議。 – 2012-05-22 14:44:49