我想通過非阻塞連接()連接到另一臺機器上的服務器。WSAEWOULDBLOCK無阻塞連接錯誤()
但是,當我這樣做時,Connect()返回-1,並且我從WSAGetLastError()接收WSAEWOULDBLOCK。
MSDN文檔指出:這是正常的WSAEWOULDBLOCK從調用connect在非阻塞SOCK_STREAM套接字報告的結果,因爲必須花費一些時間要建立的連接(reference)。
問題是我總是收到錯誤,並且從connect()返回-1即使如果我的服務器沒有運行。
正如所建議的,我的套接字是一個SOCK_STREAM套接字。我該如何補救?我應該在connect()調用之後提供一個超時來確保連接建立連接的時間足夠長嗎?
如果您嘗試連接到不存在的服務器,它可能確實會阻塞很長一段時間。即使連接到不存在的服務器或未打開的服務器端口,總會有一些網絡通信正在進行。請參閱[TCP 3-way握手](http://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml)以瞭解連接建立過程中會發生什麼。 –
您可以使用select()來阻止連接完成。 –