Ошибка: функция Socket Select () всегда возвращает ноль ..? - PullRequest
2 голосов
/ 21 августа 2011

может кто-нибудь сказать мне, почему следующий код всегда возвращает 0. значение дескриптора сокета равно 3. Я использую TFTP-сервер Open Suse. который прослушивает порт 69 в локальном хосте.

Функция connect () возвращает успех ..

   connection_timer.tv_sec = 2; // s
    connection_timer.tv_usec = 0; 

 FD_ZERO(&fd_reader);
    // laukiam, kol bus ka nuskaityti
    FD_SET(socket_descriptor, &fd_reader);

    int select_ready = select(socket_descriptor + 1, &fd_reader, NULL, NULL, &connection_timer); 

Когда я использую TCPdump для проверки пакета, он отправляет первый пакет, затем соединение закрывается где-то до получения подтверждения приема.

Ответы [ 3 ]

2 голосов
/ 21 августа 2011

Вы получите код возврата 0 из select, если время таймера (connection_timer в вашем примере) истечет до того, как какой-либо дескриптор станет интересным.

Так что это не ошибка.Скорее всего вы неправильно инициализировали connection_timer.

1 голос
/ 25 апреля 2012

Функции WSAStartup должны быть вызваны.У меня такая же проблема, и она была решена после вызова этой функции запуска.

1 голос
/ 21 августа 2011

Я подозреваю, что вы не получаете ответ, потому что вы использовали connect() на сокете UDP, что сделало так, что вы принимаете только дейтаграммы от подключенного получателя.

Так как ответ TFTP не приходитиз порта 69, а скорее из эфемерного порта, подтверждение никогда не будет получено.

Решение: не connect() свой сокет UDP, пока не закончите исходное соединение.

...