Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.013 c