Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.12.2010, 17:37
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию WinSock API

Че-то я туплю... Как на WinAPI по-нормальному проверить со стороны сервера, подключен ли клиент?
Пока ничего не придумал лучше, чем
Код:
isize:=send(s,buf,buflen,0);
и если isize=-1 значит ошибка... однако ошибка будет и в случае, если например переполнен буфер клиента.
Или хоть как получить для send код ошибки?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 08.12.2010 в 17:41.
Ответить с цитированием
  #2  
Старый 09.12.2010, 10:34
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
The Windows Sockets select function determines the status of one or more sockets, waiting if necessary.
int select (
int nfds,
fd_set FAR * readfds,
fd_set FAR * writefds,
fd_set FAR * exceptfds,
const struct timeval FAR * timeout
);

Parameters

nfds
[in] This argument is ignored and included only for the sake of compatibility.

readfds
[in/out] An optional pointer to a set of sockets to be checked for readability.

writefds
[in/out] An optional pointer to a set of sockets to be checked for writability

exceptfds
[in/out] An optional pointer to a set of sockets to be checked for errors.

timeout
[in] The maximum time for select to wait, or NULL for blocking operation.
что-то типа этого:
Код:
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  
Старый 09.12.2010, 15:44
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Спасибо вам!
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #4  
Старый 11.12.2010, 18:09
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Я немного изменил функцию, чтобы она возвращала мне 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;
Однако почему-то мне всегда возвращается TRUE, даже при отключенном клиенте.
В чем ошибка?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 12.12.2010, 20:19
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Поднимаю тему снова...
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #6  
Старый 13.12.2010, 17:54
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Ап Ап Ап Ап Ап
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025