ckv*_*ckv 2 c++ sockets windows winsock
我使用以下代码行创建了一个套接字,我得到一个有效的套接字,并在客户端和服务器机器之间建立连接.由于网络干扰或任何其他原因,套接字是否可能无效.
如果是这样,我们如何检查套接字是否有效.
SOCKET SocServer;
//To Set up the sockaddr structure
ServerSock.sin_family = AF_INET;
ServerSock.sin_addr.s_addr = INADDR_ANY
ServerSock.sin_port = htons(PortNumber);//port number of 5005
// To Create a socket for listening on PortNumber
if(( SocServer = socket( AF_INET, SOCK_STREAM, 0 )) == INVALID_SOCKET )
{
return FALSE;
}
//To bind the socket with wPortNumber
if(bind(SocServer,(sockaddr*)&ServerSock,sizeof(ServerSock))!=0)
{
return FALSE;
}
// To Listen for the connection on wPortNumber
if(listen(SocServer,SOMAXCONN)!=0)
{
return FALSE;
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以检查INVALID_SOCKET,换句话说就是套接字是0.还有其他出路,因为我的SocServer将有一个值2500,我想检查这个套接字是否有效.
将您的套接字传递给任何一个Windows套接字函数(例如getsockopt()),如果套接字无效,它将在返回SOCKET_ERROR时WSAGetLastError()返回WSAENOTSOCK.
重要的是要注意INVALID_SOCKET不相等0(实际值,你不应该具体使用((SOCKET)(~0))