URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5168
[ Назад ]

Исходное сообщение
"Вопрос по select()"

Отправлено zkrvova , 24-Фев-06 16:50 
Здравствуйте, пытаюсь читать из сокета с использованием select() но чегото невыходит. Такая програмка:
    tv.tv_sec = 5;
    tv.tv_usec = 0;

while(1){
    FD_ZERO(&rfds);
        FD_SET(sid, &rfds);

    if ((iosize = select(1, &rfds, NULL, NULL, &tv)) > 0){

        iosize=read(sid, buf, PACKET_SIZE-1);
        printf("Paket poluschen - %s\n",buf);
    }else{
        printf("Timeout\n");
    }
}        
Хоть приходит пакет, хоть неприходит,, всёравно select() ждёт 5 сек и вываливается с 0.
Что я неправильно делаю, подскажите!

Спасибо!


Содержание

Сообщения в этом обсуждении
"Вопрос по select()"
Отправлено elvenic , 24-Фев-06 17:59 
>    if ((iosize = select(1, &rfds, NULL, NULL, &tv)) > 0){

Надо

    if ((iosize = select(sid + 1, &rfds, NULL, NULL, &tv)) > 0){

$man select
<...>
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
<...>
n is the highest-numbered descriptor in any of the three sets, plus 1.
<...>