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