Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > [TCP] WinSоck либа


Автор: Sergio 28.4.2008, 01:02
Здравствуйте. При удаленном подключении к серверу когда сервер запущен, клиент подключается нормально и работает тоже хорошо. Но когда сервер остановлен, тогда клиентская часть зависает на функции connect(). Почему? Как мне ошибку обработать мол такого сервера нету и.т.п.
Код

if (connect(this->sClient, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR)
{
    printf("Connect to server failed\n");
    return 1;
}

Заранее спасибо.
P.S. при локальном подключении работает всё нормально. Сразу пишет что нельзя подключится

Автор: mrbrooks 4.5.2008, 10:16
 Я все зацикливаю. Если send()  и recv() генерят ошибку я закрываю сокет, выхожу из цикла (где send и recv() ) и заново connect() - при условии что нужно востановить связь если сервак оживет  - и т.д, либо закрываешь клиента. Все нормально. 
Но здесь я создал тему по поводу событий - это правда про винду - вроде бы их эротичней использовать - но чет у меня при разрыве связи - связь не восстанавливается - если вдруг сервак ожил. 

Автор: nerdy_weirdie 6.5.2008, 03:58
Трымай
Код

static int timed_connect( IN SOCKET s, IN const struct sockaddr FAR * name, IN int namelen, DWORD delay_sec=15, DWORD delay_usec=0 )
{
    int nRetval=SOCKET_ERROR;
    unsigned long arg=1;
    if(ioctlsocket(s,FIONBIO,&arg)!=SOCKET_ERROR)
    {
        connect(s,name,namelen);
        TIMEVAL tv;    
        fd_set fds_write;
        tv.tv_sec=delay_sec;
        tv.tv_usec=delay_usec;
        FD_ZERO(&fds_write);
        FD_SET(s, &fds_write);
        int iSocketsSet = select(0, NULL, &fds_write, NULL, &tv); 
        if (iSocketsSet != SOCKET_ERROR && iSocketsSet)
        {
            if (FD_ISSET(s, &fds_write))
            {
                nRetval=0;
            }
        }
        arg=0;
        ioctlsocket(s,FIONBIO,&arg);
    }
    return nRetval;
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)