Synapse TBlockSocket иногда зависает

Я создал приложение, которое взаимодействует с внешним устройством, используя TCP/IP в качестве клиента. Я использую библиотеку Synapse (v40) для связи. Однако иногда связь зависает. Мне удалось получить стек вызовов с помощью JclDebug, показывающий, что, несмотря на определенный тайм-аут, получение пакетов является проблемой.

Используется Делфи 2009.

Могу ли я что-нибудь сделать, чтобы решить эту проблему? Ошибка в синапсе?

[77297094] KiFastSystemCallRet 
[006193FE] blcksock.TBlockSocket.InternalCanRead (Line 2741, "synapse\blcksock.pas") 
[0061945C] blcksock.TBlockSocket.CanRead (Line 2764, "synapse\blcksock.pas") 
[006185E5] blcksock.TBlockSocket.RecvPacket (Line 2324, "synapse\blcksock.pas") 
[0061888F] blcksock.TBlockSocket.RecvTerminated (Line 2410, "synapse\blcksock.pas")    
... my own code..

Изменить: Строка блокировки:

x := synsock.Select(FSocket + 1, @FDSet, nil, nil, TimeVal);

Select -функция из winsock2 API.

Edit2: TimeVal задается кодом Synapse:

var
  TimeVal: PTimeVal;
  TimeV: TTimeVal;
..
  TimeV.tv_usec := (Timeout mod 1000) * 1000;
  TimeV.tv_sec := Timeout div 1000;
  TimeVal := @TimeV;
  if Timeout = -1 then
    TimeVal := nil;

Оригинальный исходный код находится здесь: http://synalist.svn.sourceforge.net/viewvc/synalist/trunk/blcksock.pas?revision=154&view=markup

Используемый тайм-аут 1000.

Edit3: у меня запущено два клиентских потока для связи с двумя разными хостами. Похоже, висит только другой. Приложение работает с четверга. Поток № 2 завис через 5 часов, но поток № 1 все еще работает.


person Harriv    schedule 12.09.2012    source источник
comment
На что настроено TimeVal?   -  person Remy Lebeau    schedule 13.09.2012
comment
@RemyLebeau Я добавил больше информации к вопросу.   -  person Harriv    schedule 13.09.2012


Ответы (1)


Поскольку я не мог найти причину зависания, я немного изменил код и теперь в конечном итоге вызываю RecvTerminated с CRLF в качестве терминатора вместо '>', и, похоже, он работает без остановки.

person Harriv    schedule 23.09.2012