Vérifiez si le port TCP est disponible (pas à l'écoute ou connecté)

Je utiliser le code suivant pour vérifier si un port est disponible ou pas:

bool ClassA::CheckPortTCP(short int dwPort , char *ipAddressStr)  
{  
    struct sockaddr_in client;         
    int sock;   

    client.sin_family = AF_INET;  
    client.sin_port = htons(dwPort);  
    client.sin_addr.S_un.S_addr = inet_addr(ipAddressStr);      

    sock = (int) socket(AF_INET, SOCK_STREAM, 0);  

    int result = connect(sock, (struct sockaddr *) &client,sizeof(client)); 

    //change to result == 0 -> failure in writing code too quick ;-)
    if (result = 0) return true; //port is active and used
    else return false; 
}  

Le problème est que si le port est ouvert, mais pas connecté à l'échec! Comment puis-je examiner facilement que le port est disponible (pas d'écoute, pas connecté)?

p. ex. port 21111 (sortie de la commande netstat) -> ma fonction ne reconnaît pas que le port n'est pas libre

TCP    0.0.0.0:21111          xxxxDUMMYxxxx:0       LISTENING

Thx

Comment allez-vous utiliser cette information? Si c'est pour trouver un port approprié et de l'ouvrir, la seule façon saine de faire est d'ouvrir le port et de réagir à des erreurs de l'époque. Rien d'autre a des problèmes de timing.

OriginalL'auteur leon22 | 2012-11-09