0
我使用下面的代碼客戶端套接字取消連接阻塞插座?
int ConnectToServerSocket
(
char* _serverIP, //in
char* _serverPort, //in
SOCKET& _connectedSocket //out
)
{
struct addrinfo *addrResult = NULL,hints;
ZeroMemory(&hints, sizeof (hints));
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_family = AF_UNSPEC;
int result = 0;
if (getaddrinfo(_serverIP, _serverPort, &hints, &addrResult))
{
int err = WSAGetLastError();
return err;
}
_connectedSocket = socket(addrResult->ai_family, addrResult->ai_socktype, addrResult->ai_protocol);
if (_connectedSocket == INVALID_SOCKET)
{
int err = WSAGetLastError();
freeaddrinfo(addrResult);
return err;
}
if (connect(_connectedSocket, addrResult->ai_addr, (int)addrResult->ai_addrlen) != 0)
{
int err = WSAGetLastError();
closesocket(_connectedSocket);
_connectedSocket = INVALID_SOCKET;
return err;
}
return 0; //successful
}
的問題是我要隨時取消連接,在取消事件按鈕,我叫closesocket(_connectedSocket);
但它返回後阻斷connect()
功能這麼久錯誤。
有人可以告訴我如何立即中斷connect()
函數嗎?
非常感謝,
牛逼&牛逼
使用'fcntl'將套接字設置爲'O_NONBLOCK'。 – alvits
@alvits:謝謝!但是,如果我使用非阻塞套接字,可以告訴我如何正確更改上述代碼? – TTGroup
客戶端確實在connect()上阻塞,除非套接字處於非阻塞模式。 – EJP