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

Вниз

TServerSocket: Read error 998, Неверная попытка доступа к адресу   Найти похожие ветки 

 
Ihor Osov'yak ©   (2003-01-25 00:53) [0]

Довольно редко, но возникает...
Сокет в stThreadBlocking, чтение в потоке, созданном в SrvSocketGetThread,
код для чтения прост до безобразия, привожу, хотя вряд-ли там ошибка:



procedure TServerThread.ClientExecute;

const buffLen = 64;
var
Buffer, strIn,nextIn: string;

nRead: Integer;

...

try
Stream := TWinSocketStream.Create(ClientSocket, 180000);
try

s:=strServiceHello+strVers+" protocol="+strProtVers
+" IdSeans="+IntToStr(fID)+" Key=2"#13#10;
Stream.Write(s[1],length(s));

nextIn:="";
while not Terminated and ClientSocket.Connected do
begin
Buffer := "";
strIn := nextIn;
nextIn := "";
try
SetLength(Buffer, buffLen);
repeat
nRead := Stream.Read(Buffer[1], buffLen);

....

except
on E:Exception do Log(2,"Except in ClientThread. ID="+IntToStr(fID)
+" "+E.Message);
end;




Приложение оформлено как сервис, общаюсь с ним пока через телнет в пределах локального хоста...

... Кто чего умного может подсказать по поводу этого 998.
... Я чего-то не верю, что SetLength(Buffer, buffLen); может память не выделить... Или все же перейти к старому, доброму ShortString для Buffer? Как минимум, меньше будет дерганий для выделения памяти под строку...

Зы. Ошибка может и несколько часов не появлятся, а может раза два за 15 минут ...


 
ole ©   (2003-01-27 04:47) [1]

Насколько я помню такая ошибка происходит в случае незавершения thread"а по окончанию сеанса связи. Он продолжает считывать какие-либо данные из соединения, которое уже не существует, что и генерит эксцепшин... Попробуй уменьшить таймауты. Поставь больше проверок на наличие соединения. т.е. перед каждым чтением проверяй Connected. и читай в Try except end; по эксцепту завершай трид...


 
Ihor Osov'yak ©   (2003-01-28 12:05) [2]

> ole © (27.01.03 04:47)

Да нет, сеанс тогда еще активен.
> читай в Try except end; по эксцепту завершай трид...

так и делаю.

Зы, ошибка возникает тогда, когда общаюсь с сервисом через телнет. При работе реальной клиентской программы (там также блокирующий режим в отдельном потоке) - таких проблем нет ... Правда, одна оговорка - реальный режим работы - соединение активно только несколько секунб, возможно несколько десятков, если канал плохой, телнетом вишу как правило несколько десятков минут ...

Зы2 - если я правильно понял - то это можно интерпритировать как нормальное поведение для случая разрива сеанса по каким-то внешним причинам?



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

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

Наверх




Память: 0.47 MB
Время: 0.021 c
14-54265
uw
2003-02-28 15:15
2003.03.17
По барабану


1-54015
Jaguar
2003-03-06 19:52
2003.03.17
Есть ли в Паскале/Delphi следующие операции...


4-54368
waw
2003-01-22 17:50
2003.03.17
Как вывести стандартное окно свойства файла?


14-54201
Дмитрий К.К.
2003-03-03 05:43
2003.03.17
Именинники 3 марта


14-54168
VEG
2003-03-01 14:39
2003.03.17
Где скачать только заголовки из DirectX 7/8 SDK для C++?