![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Connection: Keep-Alive и TClientSocket
eblade © (2001-11-23 11:49:00)Как можно не закрыть КлиентСокет после отправки первого запроса? Просто при первом я провожу аутентификацию, а на последующих должен идти сам процес обмена. А сокет закрывается...
eblade (2001-11-24 19:50:00) [1]Ух. Неплохо, буду знать на будущее.
В принципе, сервер не должен быть ThreadBlocking, поскольку им у меня является ПО веб-сайта. Надо будет проверить.
Digitman (2001-11-24 13:56:00) [2]>eblade
Если OnError при этом не возникает, это означает только одно : соединение разорвано вполне корректно, и инициатором разрыва является сервер. Сервер-то у тебя, наверно, ThreadBlocking ? И TServerClientThread.Execute, наверно, тоже не переопределял ?
Вот, посмотри, что делается в транспортном потоке сервера по-умолчанию:
procedure TServerClientThread.ClientExecute;
var
FDSet: TFDSet;
TimeVal: TTimeVal;
begin
while not Terminated and ClientSocket.Connected do
begin
FD_ZERO(FDSet);
FD_SET(ClientSocket.SocketHandle, FDSet);
TimeVal.tv_sec := 0;
TimeVal.tv_usec := 500;
if (select(0, @FDSet, nil, nil, @TimeVal) > 0) and not Terminated then
if ClientSocket.ReceiveBuf(FDSet, -1) = 0 then Break//!!!!!!!
else Synchronize(DoRead);
if (select(0, nil, @FDSet, nil, @TimeVal) > 0) and not Terminated then
Synchronize(DoWrite);
end;
end;
надеюсь, BREAK даст тебе ответ на вопрос.
eblade (2001-11-23 17:54:00) [3]По крайней мере вызывается OnDisconnect.
Digitman (2001-11-23 12:13:00) [4]>eblade
"сокет закрывается..." - что, сам по себе ? ни с того ни с сего ? без сообщений о причинах дисконнекта ? так не бывает)
приводи код сервера и клиента.