我有一個C/S程序。客戶端使用套接字向服務器發送文件,在發送近似超過700k數據後,客戶端(在win7上)將收到套接字10054錯誤,這意味着由對等方重置連接。socket error 10054
服務器在CentOS 5.4上工作,客戶端是windows7虛擬機在虛擬機中運行。客戶端和服務器通過虛擬網絡接口進行通信。 命令端口(發送日誌)正常,但數據端口(發送文件)有問題。 如果是由套接字緩衝區大小的錯誤配置引起的? 如果有人能幫我檢查問題。謝謝。
我每次調用套接字發送緩衝區等於4096字節 發送(插座,緩衝區,4096,0)
CentOS的插槽配置。
#sysctl -a
...
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.tcp_mem = 196608 262144 393216
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_ecn = 0
net.ipv4.tcp_reordering = 3
net.ipv4.tcp_fack = 1
我不是很明白套接字緩衝區的配置是什麼意思,如果這樣會導致接收不完整的結果問題?
「由對等方重置連接」的最可能原因是另一方崩潰的程序。 – 2011-12-19 08:32:38
@David Schwartz,服務器接縫正常,套接字未關閉,最後,recv超時錯誤。 – 2011-12-19 08:34:49
*接收*超時? TCP通常不會收到超時。這是你自己的代碼嗎?當你認爲收到超時時,你會怎麼做?你是否100%肯定客戶端在**服務器收到接收時間之前通過peer **重置了連接? (如果相反,這是你代碼中的一個錯誤,每一方都在等待另一方。) – 2011-12-19 08:37:48