0 votes

Le même socket est créé

J'ai ce morceau de code où un socket serveur est créé et est configuré pour écouter sur un numéro de port particulier, disons 5005. Maintenant, une fois que la fonction accept socket est retournée, le socket qui a été créé est copié dans la variable m_Socket et finalement je ferme le socket serveur nommé SocServer qui a été créé localement.

Maintenant, ma question Est-il possible que le SocServer (créé initialement) et le m_Socket (copié lorsque accept retourne) obtiennent le même nombre, disons 1500.

struct sockaddr_in   ServerSock;                        // Socket address structure to bind the Port Number to listen to

    char *localIP ;

    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;
    }

    // Structure to get the IP Address of the connecting Entity
    sockaddr_in insock;
        int insocklen=sizeof(insock);
        //To accept the Incoming connection on the wPortNumber
    m_Socket=accept(SocServer,(struct sockaddr*)&insock,&insocklen);
     //delete the server socket
     if(SocServer != INVALID_SOCKET)
    {
        //To close and shutdown the Socserver
        shutdown(SocServer, 2 );      
        closesocket(SocServer);
    }

est-il possible que Socserver et m_socket soient les mêmes car

Selon mon code, la connexion est établie et pour une raison quelconque, elle est fermée et dans TCPView, elle est affichée comme établie pendant un certain temps, puis plus de connexion du tout.

Note : Cela ne se produit que sur certaines machines et n'est pas toujours reproductible. Un autre problème lié au réseau peut-il en être la cause ?

2voto

PeterK Points 4218

Êtes-vous certain que le client qui se connecte à votre serveur n'a pas fermé la connexion ? De plus, vous n'avez pas fourni de fonction qui utilise m_Socket, je ne peux donc pas vous dire s'il y a un problème lors de la gestion de la connexion entrante. Je ne pense pas que m_socket y SocServer peuvent finir de la même façon.

1voto

Dans ce code :

 m_Socket=accept(SocServer,(struct sockaddr*)&insock,&insocklen);
 if(SocServer != INVALID_SOCKET)

pourquoi appelez-vous accept() avec ce qui peut apparemment être une mauvaise socket ? Et testez-vous la valeur que vous recevez de accept() quelque part ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X