線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4248
推到 Plurk!
推到 Facebook!

WSAECONNRESET (10054)錯誤的回復

 
hellojimmy_62541
一般會員


發表:4
回覆:3
積分:1
註冊:2006-10-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-02-08 13:47:08 IP:220.134.xxx.xxx 訂閱
大家好,
我的Socket程式發生WSAECONNRESET (10054) error,
可能跟環境有關,
因為在不同客戶環境上,
一個很穩定,
一個就常error,
且error是發生在server上.
請問一下,
(1)發生10054 error的connection,是否可以再復用?
(2)此時connection處於什麼狀態?
(3)調整MaxRetransmition有用嗎?(從windows 2003 server registry裡改)
謝謝!
yckuo
高階會員


發表:55
回覆:389
積分:238
註冊:2003-03-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-02-08 15:19:25 IP:220.134.xxx.xxx 未訂閱
請參考 http://delphi.ktop.com.tw/board.php?cid=31&fid=77&tid=30956

發生 WSAECONNRESET ,請再重新連線.
------
yckuo
hellojimmy_62541
一般會員


發表:4
回覆:3
積分:1
註冊:2006-10-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-02-08 16:11:22 IP:61.218.xxx.xxx 訂閱
我看過這篇錯誤訊息的整理,
謝謝.
但我想知道的是,
為什麼它會發生以及如何補救.
在這個Error發生的時候,
我的Client Socket元件並不會偵測到錯誤訊息,
以至於不會重新建立Connection.

yckuo
高階會員


發表:55
回覆:389
積分:238
註冊:2003-03-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-02-08 16:42:58 IP:220.134.xxx.xxx 未訂閱
您說那訊息是出現在 server 端,那代表的是 client 端已主動離線了,原因不明??請作一些 trace 吧.
Server 端出現這訊息時,Client 已經離線了,所以你也無法補救啥,只能釋放掉該資源而已.
看您的說明,該協定應該是 Client 主動連到 Server 端的,所以您只能在 Client 多加些程式碼
去檢查 socket 是否還有效,或是讓 Client 端,每 xx 秒發送一次訊息,通知 Server 我還活著.
這樣對兩端都會好點.
------
yckuo
hellojimmy_62541
一般會員


發表:4
回覆:3
積分:1
註冊:2006-10-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-02-08 17:41:49 IP:220.134.xxx.xxx 訂閱
嗯,
其實我Server跟Client都有設計Heart Beat,
且在Cleint端有設計Timer去計算多久沒收到Server Heart Beat,
一但超過10 sec,
Client端就會重新連線.
但現在就是Client似乎也沒有發現Connection有何異常.
是持續有收到Heart Beat?
還是其他原因?
實在很困惑.
如果是因為網路設備的原因,
該調整哪些參數可以改善這些Error呢?
謝謝!
yckuo
高階會員


發表:55
回覆:389
積分:238
註冊:2003-03-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-02-08 19:24:01 IP:220.134.xxx.xxx 未訂閱
如果你有設計 heart beat , 那應該就是 client 斷線了,server 不明究理,仍送出資料或 heart beat 導致那個錯誤.
1.這 Server & Client 可能都有問題,因為就算網路設備有問題,導致斷線,但兩方都不知道.
2.Server 有問題, Client 正常, Client 知道斷線了,已重新連上 Server , 但 Server 仍舊以該 Client 舊的 Socket 送出
資料. (此時該 Client 可能在 Server 的記錄中有兩個 Online Socket).
3.Client 有問題, 當 Client 已斷線,也沒收到 heart beat , 確仍認為自己在線上,導致 Client 沒重連上 Server.

照你的說明,我覺 Client 和 Server 都有邏輯性的問題存在.不用找網路設備的問題也不用調整啥 socket 參數
因為網路本就有可能有問題,而這些問題就是程式設計師該處理的.

建議你在 Server & Client 端都弄出個整個網路流程部份的 Log 檔加上日期印出所有相關的值,從中去找出問題.

------
yckuo
hellojimmy_62541
一般會員


發表:4
回覆:3
積分:1
註冊:2006-10-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-02-08 19:47:28 IP:220.134.xxx.xxx 訂閱
關於Log我在Server跟Client端都有寫,
不過Client端散落在各個User使用環境中,
User又不熟電腦,
所以取得困難,
目前只有Server Log可以看.
比較值得注意的是似乎User數量增加後,
發生Error的機會明顯增加,
會跟Server的Loading有關嗎?
如果延長Socket Time out時間會有幫助嗎?
謝謝!

yckuo
高階會員


發表:55
回覆:389
積分:238
註冊:2003-03-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-02-08 20:33:41 IP:220.134.xxx.xxx 未訂閱
程式你自己都有,你作一下壓力測試就知道了,不一定要取得Client端的Log.
作壓力測試,問題就會一一浮現了.
測試中途,你可以拔掉網路線試試,若要摩擬網路很爛的狀況,可以加個中介(freebsd or linux)
利用防火牆的功能作動態封包丟棄.

作這些嘗試看看,徹底解決問題,我想遠比延長 TimeOut 有效.
------
yckuo
系統時間:2024-04-25 21:14:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!