Делал вот так. То есть при выполнении операции RecvPacket указывал в аргументах время ожидания (TimeOut) в мс. Так вот заметил, что таймаут часто не работает.
- Код: Выделить всё
- procedure TMyTCPBlockSocket.Request;
 var
 BS, Prefix, Postfix: string;
 begin
 Connect(MyServer, MyPort);
 if (LastError = 0) or (LastError = 10054) then
 begin
 SendString(MessageToServerByTCP+#$0D#$0A);
 repeat
 BS := RecvPacket(TimeOut);
 FReply := FReply + BS;
 until LastError <> 0;
 end
 else
 FReply := FReply + str_QueryFailed+#$0D#$0A + LastErrorDesc;
 end;
Я так полагаю в момент соединения Connect(MyServer, MyPort). Но как задать таймаут для установски соединения TCP/IP сокетов?
Добавлено спустя 1 час 44 минуты 4 секунды:
Вот что нашел
How To Change Connect Timeout
Synapse library using sockets in blocking mode. But blocking call of Connect not have any timeout. Timeout for Connect is hardcoded in communication stack of your operating system.Any timeout property in Synapse cannot define timeout for connecting of TCP channel. It is not a bug, it depending on design of used socket API.
Exists two possible workarounds:
Call Connect in non-blocking mode. (ugly…)
Raise helper thread and after timeout try to close socket handler from this thread. (it is ugly too…)
http://www.ararat.cz/synapse/doku.php/p ... ecttimeout
Добавлено спустя 22 часа 24 минуты 47 секунд:
Может кому пригодится: проблему решил просто без всяких там ugly-решений. Я пользовался стабильной версией synapse 2012 года. В транковой же версии https://sourceforge.net/p/synalist/code/HEAD/tree/trunk/ появилось новое свойство ConnectionTimeout в объектах класса TTCPBlockSocket, которое и выполняет функцию таймаута момента соединения.



