9/29/2008

SOCKET ERROR # 10055

最近同事在工廠測GEM的時候發現,
GEM的軟體會影響到電腦TPC/IP的運作,
導致其他程式的異常。
經過實驗檢查,當我的GEM為Client時,
在Host不存在的情下,每秒Retry一次連線,
經過約兩個鐘頭後,例外就會發生,
ClientSocket Error Code 10055,
這個大約是說"No buffer space available."
也就是資源不足無法建立連線請求。
我的想法是,雖然Port被Client程式
要求做SYN_SENT,並且需要經過預設240秒
後才會被釋放,但是依照估算,Port應該
足夠使用才對,系統預設1024~5000。
所以我想buffer空間指的應該不是Port才對。
那會是因為Client程式沒有正確釋放連線嗎?
再回頭看看程式好了。
昨天做了5秒的Retry,証據指出剛好Error的時間
為5倍,這不就是說,真的是ClientSocket的問題?
誰來救我一下?!?!

PS1.我確定了這個是OS的問題,軟體目前架構下無解。
記憶體陣列被佔用不放,我能拿他怎麼辦,叫比爾大叔還來!!!

PS2.經過一番苦戰,我不知道有沒有用,不過值得一試,
把系統分頁檔設定成為電腦管理,我重開機試一下。

PS3.我剛剛想了一想,又覺得這個應該是程式的問題,
因為討厭的是程式一關閉就正常了。
那就是SOCKET沒有正確關閉的問題了。
改造去~
方法是在OnError中置入:
1.ClientSocket.socket.close;
2.ClientSocket.Socket.Disconnect(ClientSocket.Socket.SocketHandle);