2011-02-11 141 views
5

我打電話給ConnectEx()方法。它返回FALSE值,所以我用WSAGetLastError調用來檢查錯誤代碼。有時會發生返回值爲零的情況。這是什麼意思?WSAGetLastError返回零

回答

4

發生錯誤時應立即調用WSAGetLastError。 某些功能可能會將上次擴展的錯誤代碼重置爲0

更多信息在MSDN

1

沒有值爲0的Winsock錯誤代碼,因此我最好猜測的是您沒有調用WSAStartup。

0

winsock recv函數可以返回一個錯誤(SOCKET_ERROR),然後即使下一次調用WSAGetLastError,它仍然可以返回0作爲錯誤代碼。

從調試模式切換到發佈模式時,我首先發現了這個'錯誤'。我的代碼在調試時工作正常,但在發佈模式下會斷開客戶端連接。

原因是接收緩衝區不夠大。但這在任何地方都沒有記錄。在我的情況下釋放模式使事情足夠快,足以溢出緩衝區。

簡單地增加緩衝區的大小將解決此問題(在recv的是第三個參數。

希望這有助於。好運