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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как проверить состояние сокета? 
:(
    Опции темы
-Mikle-
Дата 5.6.2005, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



кратко опишу проблему.

Есть код на сервере, который в отдельном потоке циклично проверяет, пришли ли данные:


Код

        void ThreadRecive()
        {
            // RSck - это переменная класса типа Socket, полученная при вызове
            // метода TcpListener.AcceptSocket()

            int AvData;
            Console.WriteLine("enter to ThreadRecive");
            while( doThread )
            {
                AvData = RSck.Available;
                if ( AvData > 0 )
                {
                    // вызов события класса
                    OnRecive(this, RSck, AvData);
                    if ( c_OneRecive ) doThread=false;
                }
                Thread.Sleep(1);
            }
            Console.WriteLine("exit from ThreadRecive");
        }



Проблема в следующем: если во время выполнения цикла клиент отрубится, т.е. сокет станет не доступен для передачи или приема, то цикл так и будет выполнятся, не зная о том, что удаленный комп уже недоступен.
Мне нужно как-то отловить факт того, что клиент стал недоступен(например у него инет пропал), еще до того как я че-нить ему пошлю. Отлавливать ексепшн, при посылке данных клиенту, не годиться, так как эти данные сервер может и не послать никогда. Короче мне в этом цикле нужно поймать момент, когда клиент отрубился.

PS: MSDN смотрел...


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
-Mikle-
Дата 5.6.2005, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



ИЗВИНЯЮСЬ ЗА ТО ЧТО ПОТОРОПИЛСЯ С ВОПРОСОМ.

Вопрос снят, определить отвалился ли клиент можно так:

if ( RSck.Poll(0, SelectMode.SelectRead) && RSck.Available == 0)
{
// соединение было закрыто
}


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




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


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

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