Главная страница
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.023 c
1-1083568727
V-Isa
2004-05-03 11:18
2004.05.16
Загрузить BitMap из Project1.res?


14-1083148485
Думкин
2004-04-28 14:34
2004.05.16
Погода пииип-пип


14-1083088406
УНЯ
2004-04-27 21:53
2004.05.16
ЕСЕМЕСки


1-1083068196
P_Aleks
2004-04-27 16:16
2004.05.16
Потоки и формы


14-1082909285
Knight
2004-04-25 20:08
2004.05.16
Есть ли сейчас нормальные, заморочные квесты?