![]() |
|
|
|
|
#1
|
||||
|
||||
|
Че-то я туплю... Как на WinAPI по-нормальному проверить со стороны сервера, подключен ли клиент?
Пока ничего не придумал лучше, чем Код:
isize:=send(s,buf,buflen,0); Или хоть как получить для send код ошибки? Последний раз редактировалось Bargest, 08.12.2010 в 17:41. |
|
#2
|
||||
|
||||
|
Цитата:
Код:
procedure check(ASocket: TSocket; ATimeOutWrite: Integer);
var
ErrorCode: Integer;
FDSet: TFDSet;
TimeVal: TTimeVal;
begin
if ASocket=INVALID_SOCKET then
raise Exception.Create('invalid socket');
FD_ZERO(FDSet);
FD_SET(ASocket, FDSet);
TimeVal.tv_sec:=ATimeOutWrite div 1000;
TimeVal.tv_usec:=(ATimeOutWrite mod 1000)*1000;
select(0, nil, @FDSet, nil, @TimeVal);
if not FD_ISSET(ASocket, FDSet) then
raise Exception.Create('exception');
end; |
|
#3
|
||||
|
||||
|
Спасибо вам!
|
|
#4
|
||||
|
||||
|
Я немного изменил функцию, чтобы она возвращала мне True или False.
Код:
function CheckSock(ASocket: TSocket; ATimeOutWrite: integer): boolean;
var
ErrorCode: integer;
FDSet: TFDSet;
TimeVal: TTimeVal;
begin
result := false;
if ASocket = INVALID_SOCKET then
raise Exception.Create('invalid socket');
FD_ZERO(FDSet);
FD_SET(ASocket, FDSet);
TimeVal.tv_sec := ATimeOutWrite div 1000;
TimeVal.tv_usec := (ATimeOutWrite mod 1000) * 1000;
select(0, nil, @FDSet, nil, @TimeVal);
if FD_ISSET(ASocket, FDSet) then
result := true;
end;В чем ошибка? |
|
#5
|
||||
|
||||
|
Поднимаю тему снова...
|
|
#6
|
||||
|
||||
|
Ап Ап Ап Ап Ап
|