Здравствуйте.
Может быть этот вопрос уже поднимался, но я никак не могу найти решение.

Написал простой сервер на ПЛК. К нему нормально все подсоеденяются, отсылаются и принимаются сообщния, но только первые несколько секунд. Потом связь теряется , примерно через одинаковое время. Как будто по таймуту, хотя нигде ничего не прописано. Вот код:

CASE s_state OF
SS_INIT:

FOR i := 1 TO 10 DO
SysSockClose( i );
END_FOR

sock:=SysSockCreate( SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP );
IF sock = 16#FFFFFFFF THEN
s_state := SS_INIT;
RETURN;
END_IF
s_state := SS_OPEN;

SS_OPEN:
tcp_adr.sin_family:=SOCKET_AF_INET;
tcp_adr.sin_port := port;
tcp_adr.sin_addr:=SOCKET_INADDR_ANY;
paddr:=ADR(tcp_adr);
res:=SysSockBind(sock,paddr,SIZEOF(tcp_adr));
res:=SysSockListen( sock, 1 );
paddr:=ADR( accept_adr );
sock_acc := sock;
param_ctrl:=1;
SysSockIoctl( sock_acc, SOCKET_FIONBIO, ADR( param_ctrl ) );
s_state := SS_RCV;
RETURN;


SS_RCV:
rcv_buf_cnt := SysSockRecv( sock_acc, ADR( ByteBuffer ), 130, SOCKET_MSG_OOB );

IF rcv_buf_cnt = 16#FFFFFFFF OR rcv_buf_cnt = 0 THEN
RETURN;
END_IF

FOR i := 0 TO rcv_buf_cnt - 1 DO
tmp_ptr := ADR( ByteBuffer[ i ] );
StringBuffer := CONCAT( StringBuffer, LEFT( tmp_ptr^ , 1 ) );
IF LEN( StringBuffer ) > 254 THEN
StringBuffer := DELETE( StringBuffer, 1, 1 );
END_IF
END_FOR


SendBuffer := CONCAT( 'Recive messager', StringBuffer );


StringBuffer := '';

s_state := SS_SEND;


SS_SEND:

send_buf_cnt := SysSockSend( sock_acc, ADR( SendBuffer ), LEN( SendBuffer ), 0 );

SendBuffer := '';

s_state := SS_RCV;

END_CASE

Подскажите, где может быть ошибка