套接字绑定总是在linux上返回0,即使端口已被占用

时间:2014-05-27 18:23:50

标签: c++ linux sockets

如果在Linux上运行,以下代码将从bind返回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; 
    } 

0 个答案:

没有答案