SRC: connect with timeout (for TCP-oriented sockets)
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 12.09.02 12:49
Оценка: 30 (4)
Вот, в общем, выдрал из одного из своих постов, дабы такая полезная весчь была на своем месте, а именно в форуме "Исходники". Признаюсь честно — функция писана не мной, но оценки можете ставить мне — за волю к победе и продвижения знания в массы


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

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

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

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

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

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

        }
    }

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

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





В общем, применять по назначению врача вместо обычного connect.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.