在Linux上,Socket绑定总是返回0,即使端口已经被占用了

如果在Linux上运行,下面的代码返回0,即使当netstat清楚地显示端口被另一个进程占用时,即以下函数总是返回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; }