Ну по поводу keep-alive и подобных пингов, собственно, примерно об этом я и написал начальном посте топика. Можно периодически отправлять команду HELLO серверу и получать ответы (GREETING) для избежания принудительного разрыва TCP соединения со стороны сервера по причине превышения таймаута. Думал есть родные для TCP сокетов проверки соединения.
---- -----
Чтобы не создавать новой смежной темы по поводу TCP
решил опубликовать вновь возникший вопрос здесь же.
Вот у меня есть поток, который после отправки команды освобождается. Сокет (TTCPBlockSocket) создается внутри потока и тоже освобождается соответственно. Традиционно в потоках нужные данные между сессиями и отправками команд к серверу я сохранял передавая данные потока основному. Но вот, что делать в данном случае, если мне нужно сохранить TCP соединение, но объект класса TTCPBlockSocket также соответственно уничтожится.
Варианты:
1. Создавать сокет в основном потоке (при это устанавливать соединение в потоке).
2. Как то можно сохранить TCP соединение между двумя объектами сокета (TTCPBlockSocket)? Чтобы при уничтожении объекта сокета (TTCPBlockSocket) TCP соединение не закрывалось, более того, в последующем при создании нового объекта сокета как-то восстановить данные непрерванного TCP-соединения?
3. Все варианты плохи? И каждый раз авторизоваться для отправки команды (по-моему плохой неоптимальнй вариант)
Добавлено спустя 4 минуты 52 секунды:MaratIsk писал(а):- Код: Выделить всё
FSynClient.Connect(FHost, FPort);
if (FSynClient.LastError <> 0) and (FSynClient.LastError <> 10056) then begin
try
FSynClient.CloseSocket;
FSynClient.Connect(FHost, FPort);
if (FSynClient.LastError <> 0) then
raise Exception.Create(IntToStr(FSynClient.LastError) + ' ' + FSynClient.LastErrorDesc);
except
raise;
end;
end;
Тему с проверкой TCP соединения без отправки или приема сообщения решил "закрыть" для себя. Но все же, можете сопроводить комментариями приведенный Вами код? Я не понял назначения этого кода.
Добавлено спустя 36 минут 14 секунд:Пока думаю просто создавать и хранить сокет в основном потоке. А уже соединятся и обрабатывать в соответствующем для этого потоке [который иногда останавливается и уничтожается]