CASE Step OF
0: (* Шаг создания и настройки сокета *)
hServerSocket:= SysSockCreate(iAddressFamily:= SOCKET_AF_INET, diType:= SOCKET_STREAM, diProtocol:= SOCKET_IPPROTO_TCP, pResult:= ADR(Result_SysSockCreate));
Result_SysSockIoctl:= SysSockIoctl(hSocket:= hServerSocket, diCommand:= SOCKET_FIONBIO, pdiParameter:= ADR(mode)); (* Переводи сокет в не блокирующий режим *)
Socket.sin_family:= SOCKET_AF_INET;
Socket.sin_addr.ulAddr := SOCKET_INADDR_ANY; (* Принимать от любого адреса *)
Socket.sin_port := SysSockHtons(usHost:= Port); (* Порт по которому будет осуществляться прием *)
Result_SysSockBind:= SysSockBind(hSocket:= hServerSocket, pSockAddr:= ADR(Socket), diSockAddrSize:= SIZEOF(Socket)); (* Привязываем порт к сокету *)
Result_SysSockListen:= SysSockListen(hSocket:= hServerSocket, diMaxConnections:= MaxConnections);
(* Включаем прослушивание сокета *)
Step:= 1;
1:
Tries_1:= Tries_1 + 1;
hClientSocket:= SysSockAccept(hSocket:= hServerSocket, pSockAddr:= ADR(Socket), pdiSockAddrSize:= ADR(SocketSize), pResult:= ADR(Result_SysSockAccept)); (* Ожидание соединение от клиента, возвращаем номер сокета клиента *)
IF hClientSocket <> 16#FFFFFFFF THEN
Result_SysSockInetNtoa:= SysSockInetNtoa(pInAddr:= ADR(Socket.sin_addr.ulAddr), szIPADDR:= Client_IP, diIPAddrSize:= SIZEOF(Client_IP));
Step:= 3;
ELSIF Tries_1 > 10 THEN
Tries_1:= 0;
Step:= 5;
END_IF;
2:
Tries_2:= Tries_2 + 1;
Send_Buf[1]:= Send_Buf[1] + 1;
Send_Buf[2000]:= Send_Buf[2000] + 1;
Send_Buf[3000]:= Send_Buf[3000] + 1;
Send_Buf[5000]:= 50;
SendByte:= SysSockSend(hSocket:= hClientSocket, pbyBuffer:= ADR(Send_Msg), diBufferSize:= SIZEOF(Send_Msg), diFlags:= 0, pResult:= ADR(Result_SysSockSend)); (* Отправляем сообщение *)
IF SendByte > 0 THEN
Step:= 3;
END_IF
IF Tries > 1000 THEN
Step:= 3;
END_IF;
3:
Tries_3:= Tries_3 + 1;
Recv_Msg:= '';
RecvByte:= SysSockRecv(hSocket:= hClientSocket, pbyBuffer:= ADR(Recv_Buf), diBufferSize:= 256, diFlags:= 0, pResult:= ADR(Result_SysSockRecv));
Step:= 4;
IF RecvByte > 0 THEN
Step:= 3;
Tries_3:= 0;
ELSIF
Tries_3 > 10
THEN
Tries_3:= 0;
Step:= 4;
END_IF;
4:
SysSockClose(hSocket:= hClientSocket);
Step:= 5;
Tries_4:= Tries_4 + 1;
5:
SysSockClose(hSocket:= hServerSocket);
Step:= 0;
Tries:= 0;
Tries_5:= Tries_5 + 1;
END_CASE;