ICQ - форум. Всё про ICQ.  

Вернуться   ICQ - форум. Всё про ICQ. > Мастерская > Программирование

Программирование C / C++ / Visual C++ / Delphi / Visual Basic / ASM / Windows / Pascal

 
 
Опции темы Оценить тему
Старый 11.12.2010, 11:43   #1
Почти участник
 
Регистрация: 02.02.2008
Сообщений: 1,843

Репутация: 5599
Нефкуриваю winsock: определить отключение

Есть сокет, нужно быстро определить, подключен ли он в данный момент. В фреймворках вроде Qt, к примеру, есть сигналы onDisconnected, которые умеют быстро сообщать о дисконнекте удаленного хоста. Сейчас же понадобилось написать приложение на C, соответственно, фреймворки использовать нельзя. Как это сделать?
В гугле рабочего кода не нашел =(

Решено, см. пост №3

Последний раз редактировалось RankoR; 11.12.2010 в 23:44.
RankoR вне форума  
Плюсанул RankoR :
Старый 11.12.2010, 15:19   #2
Участник
 
Регистрация: 06.08.2006
Сообщений: 243

ICQ: 272727765

Репутация: 406
По умолчанию

winsock разный есть. Если беркли, то select на чтение с минимальным таймаутом вернет ошибку. Если событийные виндовые WSA*** там вроде свой колбек есть.
__________________
Мой блог - Mac, Qt и немного Delphi.
Sax-mmS вне форума  
Плюсанули Sax-mmS — 3 :
Старый 11.12.2010, 20:40   #3
Почти участник
 
Регистрация: 02.02.2008
Сообщений: 1,843

Репутация: 5599
По умолчанию

Sax-mmS, SOCKET_ERROR вернет? Т.е. нужно передать ему указатель (struct fd_set) в параметр, отвечающий за чтение? И, если не трудно, приведи пример правильного заполнения структуры timeval для этой цели.

Добавлено через 3 часа 2 минуты
Разобрался, спасибо Sax-mmS'у =)
Код:

PHP код:
// Set non-blocking mode
u_long io 1;
ioctlsocket(clientSockFIONBIO, &io);

struct timeval tv;
tv.tv_sec    0;
tv.tv_usec  250000;

struct fd_set fdset;
FD_ZERO(&fdset);
FD_SET(clientSock, &fdset);



if ( 
select(clientSock, &fdsetNULLNULL, &tv) == )
   break; 
// Disconnected

// Set blocking mode back
io 0;
ioctlsocket(clientSockFIONBIO, &io); 

Последний раз редактировалось RankoR; 11.12.2010 в 23:43. Причина: Добавлено сообщение
RankoR вне форума  
Плюсанули RankoR — 2 :
 

Опции темы
Оценка этой теме
Оценка этой теме:

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 11:21.


Перевод: zCarot
Форум Асечников © Asechka.RU

Новости Сочи