O
oxkfame
The following code returns 0 from the bind, even when netstat clearly shows that the port is taken by another process, ie the following function will always return true. Why?
bool isPortAvailable( int port )
{
SOCKET candidateSocket;
if(( candidateSocket = socket( AF_INET, SOCK_STREAM, 0 )) == -1 )
return false;
struct sockaddr_in serverAddress;
memset (&serverAddress, 0, sizeof (serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = htonl( INADDR_ANY );
serverAddress.sin_port = htons( port );
if( ::bind( candidateSocket, (struct sockaddr*)&serverAddress, sizeof( serverAddress )) != 0 )
{
closesocket( candidateSocket );
return false;
}
closesocket( candidateSocket );
return true;
}
bool isPortAvailable( int port )
{
SOCKET candidateSocket;
if(( candidateSocket = socket( AF_INET, SOCK_STREAM, 0 )) == -1 )
return false;
struct sockaddr_in serverAddress;
memset (&serverAddress, 0, sizeof (serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = htonl( INADDR_ANY );
serverAddress.sin_port = htons( port );
if( ::bind( candidateSocket, (struct sockaddr*)&serverAddress, sizeof( serverAddress )) != 0 )
{
closesocket( candidateSocket );
return false;
}
closesocket( candidateSocket );
return true;
}