Re: SRC: connect with timeout (for TCP-oriented sockets)
От: ander_fatman  
Дата: 06.11.02 05:58
Оценка:
Здравствуйте Flamer, Вы писали:

F>Вот, в общем, выдрал из одного из своих постов, дабы такая полезная весчь была на своем месте, а именно в форуме "Исходники". Признаюсь честно — функция писана не мной, но оценки можете ставить мне — за волю к победе и продвижения знания в массы


F>

F>
F>// timeout задается в миллисекундах

F>int connectex(SOCKET s, const struct sockaddr *name,
F>                            int namelen, long timeout)
F>{
F>    // As connect() but with timeout setting.
F>    int            rc = 0;
F>    ULONG          ulB;
F>    struct timeval Time;
F>    fd_set         FdSet;

F>    ulB = TRUE; // Set socket to non-blocking mode
F>    ioctlsocket(s, FIONBIO, &ulB);

F>    if (connect(s, name, sizeof(SOCKADDR)) == SOCKET_ERROR) {

F>        if (WSAGetLastError() == WSAEWOULDBLOCK) {
F>            // now wait for the specified time
F>            FD_ZERO(&FdSet);
F>            FD_SET(s, &FdSet);

F>            Time.tv_sec  = timeout / 1000L;
F>            Time.tv_usec = (timeout % 1000) * 1000;
F>            rc = select(0, NULL, &FdSet, NULL, &Time);

F>        }
F>    }

F>    ulB = FALSE; // Restore socket to blocking mode
F>    ioctlsocket(s, FIONBIO, &ulB);

F>    return (rc > 0) ? 0 : SOCKET_ERROR;
F>}
F>


F>

F>

F>В общем, применять по назначению врача вместо обычного connect.



с этим я уже разобрался, мне надо чтобы сервер слушал n-ое время и не дождавшись ни одного подключения говорил, что произошла фигня, в принципе есть мысль попробовать listen->ioctlsocket->select->accept
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.