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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как определить что select вернул сокеты с дисконне 
:(
    Опции темы
hash_2000
Дата 10.11.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем здравствуйте !
такая вот проблемка .. есть сервер который принимает клиентские подключения и записывает их все в общую 
fd_set ну и слушает когда поступит подключение или прием данных через, соответственно, select .. 
так вот .. если ктото из клиентов сделал у себя closesocket то функция select так же как и приеме данных вернет буфер с откликнувшимися сокетами
... может кто знает ... вот как определить именно в том месте где select вернула управление что сокет не данные прислал а именно отключился,
без использования recv .. дело в том что чтение данных уже проводится в потоках, а хотелось бы определить отключенный сокет еще до того как он 
отправился на обработку в поток ... есть ли вообще такая возможность?
например так:

Код


fd_set g__arr;
 
 
void Init ()
{
 
    SOCKET sock = // ... создаем сокет в режиме listen на какойто порт
    FD_SET( sock, &g__arr );
 
}
 
void Wait ()
{
 
   while( 1 )
   {
 
      fd_set pWait;
      memcpy( &pWait, &g__arr, sizeof(fd_set) );
 
   // вот тут ждем вечно
      int ret = select( &pWait, 0,0,0 );
   // как только чтото пришло
   // вот тут например и обрабатываем все что нам пришло на порты которые слушаются
 
      for( int i = 0 ; i < pWait.fd_count ; i ++ )
      {
 
   // если это попытка соедениться то делаем :
           SOCKET cl = accept( m_buf.fd_array[i], ... );
           FD_SET( cl, &g__arr );
   // если это был клиентский сокет на который должны были прийти какието данные ...
   // то читаем данные и обрабатывает
   // но если ктото из клиентских сокетов сделал closesocket то select вернет в pWait массив сокеты
   // которые сделали closesocket и ret будет равен количеству элементов в pWait  ....
   //   и вот как тут вот узнать что клиент именно разорвал соединение а не передает данные ????
 
      }
 
   }
}
 
void main ()
{
     Init();
     Wait();
 
}



PM MAIL   Вверх
hash_2000
Дата 11.11.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот решение ... если кому интересно 
http://forum.sources.ru/index.php?showtopic=318020
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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