Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [TCP] WinSоck либа, remote connection 
:(
    Опции темы
Sergio
  Дата 28.4.2008, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: нет
Всего: 1



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

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

Заранее спасибо.
P.S. при локальном подключении работает всё нормально. Сразу пишет что нельзя подключится
PM MAIL ICQ   Вверх
mrbrooks
Дата 4.5.2008, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



 Я все зацикливаю. Если send()  и recv() генерят ошибку я закрываю сокет, выхожу из цикла (где send и recv() ) и заново connect() - при условии что нужно востановить связь если сервак оживет  - и т.д, либо закрываешь клиента. Все нормально. 
Но здесь я создал тему по поводу событий - это правда про винду - вроде бы их эротичней использовать - но чет у меня при разрыве связи - связь не восстанавливается - если вдруг сервак ожил. 
PM MAIL   Вверх
nerdy_weirdie
Дата 6.5.2008, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Трымай
Код

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;
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.