2008年6月4日 星期三

使用CAsyncSocket碰到的問題 : Create

在用MFC寫網路程式的時候,會用CAsyncSocket來產生出自己的非同步Socket Class。用CAsyncSocket建立連線的時候,Client端只要呼叫Create和Connect這兩個Function就好了,不需要像純粹的Socket一堆設定動作。

而這些繁雜的設定都被包在Create裡面了,這也是我這次碰到的問題。

那Create裡面到底做了些什麼?
1. 呼叫CAsyncSocketSocket函式
1.1 Socket函式裡面會先檢查m_hSocket是否被清成INVALID_SOCKET
1.2 呼叫利用socket函式產生新的m_hSocket
2. 如果呼叫Socket函式成功,接下來呼叫Bind函式,在Bind函式裡面會設定一些Socket相關資訊,然後進行Bind的動作
3. 最後就是成功Create,然後執行ConnectServer

而我產生錯誤的地方就在 1.1 的部分,因為我的程式可能因為遠端Server無法連線而造成Connect失敗,在Connect失敗以後我沒有呼叫Close來清除m_hSocket的資源,並且將m_hSocket給設定成INVALID_SOCKET,因此在呼叫Create的時候就會產生出ASSERT的錯誤訊息。

所以對於使用的函式庫的function,如果能多了解裡面程式碼實際的內容的話,就能避免掉一些因為和函式庫設計邏輯不同而產生的錯誤。

參考資料 :
MSDN

沒有留言: