Тот же сокет создается - PullRequest
0 голосов
/ 15 июня 2010

У меня есть этот фрагмент кода, где создается сокет сервера, и он настроен на прослушивание определенного номера порта, скажем, 5005. Теперь, когда функция accept socket возвращает созданный сокет, он копируется в переменную m_Socket и, наконец, я завершаю работу.сокет сервера с именем SocServer, который был создан локально.

Теперь мой вопрос Возможно ли, чтобы SocServer (созданный изначально) и m_Socket (скопированный, когда принимают возврат) получили одно и то же число, скажем 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);
    }

возможно, что Socserver и m_socket одинаковы, потому что

согласно моему коду, соединение с сокетом установлено, и по какой-то другой причине оно закрывается, и в TCPView оно показывает установленное на некоторое время, а затем нет соединениявообще.

Примечание: это происходит только на некоторых машинах и не всегда воспроизводимо.Может быть причиной любой другой проблемы, связанной с сетью.

Ответы [ 2 ]

2 голосов
/ 15 июня 2010

Вы уверены, что клиент, подключающийся к вашему серверу, не закрыл соединение? Кроме того, вы не предоставили никакой функции, которая использует m_Socket, поэтому я не могу сказать вам, есть ли проблема при обработке входящего соединения. Я не думаю, что m_socket и SocServer могут закончиться тем же.

1 голос
/ 15 июня 2010

В этом коде:

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

почему вы вызываете метод accept () с тем, что, по-видимому, может быть плохим сокетом?И проверяете ли вы значение, которое вы получаете от accept () где-нибудь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...