Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

как сделать time-out на recvfrom?   Найти похожие ветки 

 
3APA3A ©   (2004-03-22 22:04) [0]

создаю UDP socket
   socket...
   bind...
 и жду пакетов
   recvfrom()..
 надо как-нибудь сделать так, что-бы recvfrom ждал данные не более 3 или 5 секунд... то есть - если в стеке протокола нет данных - recvfrom ждет их 5 секунд и если их так и нет - возвращает управление в программу...


 
Verg ©   (2004-03-22 22:19) [1]

Воспользуйся классическим способом - select, например:

function WaitForData(S : TSocket; TimeOut : DWORD): integer;
var FDS : TFDset;
   Tv  : TTimeval;
   Ptv : PTimeVal;
begin
 FD_ZERO(FDS);
 FD_SET(S, FDS);
 Ptv := nil;
 if TimeOut <> INFINITE then
 begin
   Tv.tv_sec  := TimeOut div 1000;
   Tv.tv_usec := (TimeOut mod 1000) * 1000;
   Ptv := @Tv;
 end;
 result := select(0, @FDS, nil, nil, Ptv);
end;

Результат ф-ции будет > 0, если есть данные, 0 - если таймаут, SOCKET_ERROR - если произошла какая-нибудь ошибка (WSAGeLastError уточнит)

Можно обявить сокету асинхронный режим и вообще ничего не ждать - будут данные - тебе сообщат (WSAAsyncSelect) оконным сообщением.
Чтобы жить в "одном измерении" с WIN32 можно сокету назначить объект синхронизации - event, чтобы его можно было ожидать наравне/вместе с другим такими же (подобными) объектами как в ф-ции WaitForMultipleObjects или MsgWaitForMultipleObjects, а не только с сокетами же (как в select). Для этого предназначена ф-ция WSAEventSelect, но это уже из WINSock2.
OverLapped IO опять же можно применить, т.е. простейший ReadFile, где вместо хендла файла можно подставить сокет, сформировав и заполнив структуру TOverlapped...
Много способов в общем....


 
3APA3A ©   (2004-03-22 23:00) [2]

tnx...



Страницы: 1 вся ветка

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.12 c
11-1069519122
BelchonokH
2003-11-22 19:38
2004.05.16
Максимизация формы


3-1082642735
RomCom
2004-04-22 18:05
2004.05.16
Поля с данными Null в TQuery+TUpdateSQL


3-1082696901
WondeRu
2004-04-23 09:08
2004.05.16
Высота строк в DBGrid!


11-1068963064
Ciber SLasH
2003-11-16 09:11
2004.05.16
Тормоза в PaintBox e


1-1083578385
Петя
2004-05-03 13:59
2004.05.16
Handle dll