CASE step OF //Настройки
0:
stop:=FALSE;
hSocket:=SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP, ADR(result));
sa.sin_family:=SOCKET_AF_INET;
sa.sin_addr.ulAddr:=SOCKET_INADDR_ANY;
sa.sin_port:=SysSockHtons(port);
result:=SysSockIoctl(hSocket, SOCKET_FIONBIO, ADR(mode));
result:=SysSockBind(hSocket, ADR(sa), SIZEOF(sa));
result:=SysSockListen(hSocket, maxCli);
tries:=0;
step:=1;
//Коннект к серверу
1:
tries:=tries+1;
hClientSocket:=SysSockAccept(hSocket, ADR(sa), SIZEOF(sa), ADR(result));
IF hClientSocket<>16#FFFFFFFF THEN
step:=3;
tries:=0;
okConn:=okConn+1;
END_IF
IF tries > 100 THEN //Ошибка, нет связи
step:=4;
tries:=0;
END_IF
//Отправляем данные
2:
tries:=tries+1;
nbSend:= SysSockSend (hClientSocket, ADR(strSend), LEN(strSend), 0, ADR(result));
IF nbSend<>0 THEN
step:=3;
tries:=0;
END_IF
IF tries > 100 THEN //Ошибка, нет связи
step:=4;
tries:=0;
END_IF
//Ждем и разбираем ответ
3:
tries:=tries+1;
strRecv:='';
nbRecv:= SysSockRecv (hClientSocket, ADR(strRecv), 1024,0, ADR(result));
IF nbRecv<>0 THEN
ok:=ok+1;
tries:=0;
END_IF
IF tries > 10 THEN
step:=4;
tries:=0;
END_IF
4:
SysSockClose (hClientSocket);
IF stop THEN
step:=5;
ELSE
step:=1;
END_IF
5:
SysSockClose (hSocket);
step:=0;
END_CASE