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

Вниз

function connect...   Найти похожие ветки 

 
4ert   (2006-12-21 06:24) [0]

Есть вот такая функция:

function CallServer(Server:string; Port:word):integer;
var
 SockAddr:TSockAddr;
begin
 Result:=socket(Internet,Stream,0);
 if Result=-1 then exit;
 FillChar(SockAddr,SizeOf(SockAddr),0);
 SockAddr.Family:=Internet;
 SockAddr.Port:=swap(Port);
 SockAddr.Addr:=HostToLong(Server);
 if Connect(Result,SockAddr,SizeOf(SockAddr))<>0 then begin
  Disconnect(Result);
  Result:=-1;
 end;
end;

Что в ней плохо, так это то, что если сервер не доступен, аль тупорылит, то приходится ждать очень много при полном зависании программы, хотелось бы узнать у более осведомленных людей две вещи:
1) Как бы сделать так, что подключаясь ждали какое-нить определённое время(скажем 3 секунды), и если за это время не удалось подключится, то забиваем на эт дело и выходим из функции... Эт вообще возможно?
2)Как избавиься от подвисания проги во время её попытки конекта?

Заранее спасибо!!!


 
Сергей М. ©   (2006-12-21 08:13) [1]

1) После создания перевести гнездо в неблок.режим, см. IoCtlSocket(FIONBIO) и select()
Можно так же задействовать и неблок.режим с асинхронными нотификациями, см. WSAAsyncSelect, WSAEventSelect, WSAEnumNetworkEvents, WSAWaitForMultipleobjects

2) Вынести блокирующие участки кода в доп.поток



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

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

Наверх




Память: 0.46 MB
Время: 0.063 c
3-1161809652
softsapiens
2006-10-26 00:54
2007.01.14
Обновление базы данных


9-1141770485
KreeS
2006-03-08 01:28
2007.01.14
War Metal супер-гама грядет...


3-1161771715
Climber
2006-10-25 14:21
2007.01.14
как произвести сортировку при использовании подзапроса?


2-1166921681
Fist
2006-12-24 03:54
2007.01.14
if FindFirst( *.* , faDirectory, srDir) = 0 then - находит все фа


15-1167023057
vajo
2006-12-25 08:04
2007.01.14
Может у кого есть принтер Canon LBP-3200