C ++ Сбой в SOCKET метод accept () - PullRequest
       1

C ++ Сбой в SOCKET метод accept ()

0 голосов
/ 23 октября 2010

Я сейчас делаю Сервер, я научился делать что-то вроде этого:

while(true)
{
     SOCKET s = accept(s, ....)

     // do something with the connection
     printf("connection\n");
}

Я узнал, что он застрянет при принятии (..), пока нет соединения.В моей программе еще нет соединения, но оно переполняется соединением ??Я имею в виду, что моя Консоль получила спам от "подключения".

Так что же не так?


THX Ребята, я исправил это сейчас:)

Ответы [ 4 ]

2 голосов
/ 23 октября 2010

Скорее всего, он немедленно возвращается с ошибкой, которую вы, похоже, не проверяете. Например. может быть, s не был создан должным образом и т. д.

Редактировать : только что заметил, что вы присваиваете результат accept () тем же самым 's', что ужасно неправильно. Ваш 's' - это обычный сокет прослушивания, предположительно созданный socket (), связанный с bind () и настроенный на прослушивание listen (), тогда как возвращаемое значение accept () - это другой сокет, который вы должны использовать для передачи данных.

Взгляните на это, например (только что найденный Google): http://www.cs.odu.edu/~cs476/fall03/lectures/sockets.htm

0 голосов
/ 23 октября 2010

Вызовите WSAGetLastError () и посмотрите, что он возвращает.Этот код ошибки можно затем ввести в инструмент поиска ошибок (вы найдете его в меню инструментов Visual Studio).Скорее всего, вы неправильно инициализировали сокет вашего сервера.

0 голосов
/ 23 октября 2010

Я добавил несколько проверок:

while(true)
{
    SOCKET s = 
        accept(m_Socket, (sockaddr*)&from, &fromlen);

    if(s != SOCKET_ERROR)
    {
        printf("Client connected to the Server. ");
        Client* client = new Client(s); // Memory Leak here .. i know
    }
}

Мой процессор на 16%, хотя нет подключенного Клиента.

0 голосов
/ 23 октября 2010

Я немного отладил, и каждое полученное мной Fail Socket получило значение: 4294967295.

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