Главная страница
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.033 c
1-1083298835
DataTime
2004-04-30 08:20
2004.05.16
Как отнять от ДатыВремя допустим несколько часов


1-1083387988
SHS
2004-05-01 09:06
2004.05.16
Application.Exename в DLL


3-1082582387
GanibalLector
2004-04-22 01:19
2004.05.16
Непонятки с IB...


8-1077024501
чудо чучкелла
2004-02-17 16:28
2004.05.16
сложный вопрос по программному созданию wave файлов


9-1073342523
Barlokf
2004-01-06 01:42
2004.05.16
Autorun для игр