-
ПЛК 304 и SysSockAccept
При попытке подключиться вылетает иключение в контролле.
PHP код:
CASE status OF
INIT:
ServerSocket := SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP, ADR(resultSysSockCreate));
Addres.sin_family := SOCKET_AF_INET;
Addres.sin_addr.ulAddr := SOCKET_INADDR_ANY;
Addres.sin_port := SysSockHtons(usHost:= 1000);
IF resultSysSockCreate = Errors.ERR_OK THEN
IF SysSockIoctl(hSocket:= ServerSocket, diCommand:= SOCKET_FIONBIO, pdiParameter:= ADR(mode)) = Errors.ERR_OK THEN
status := CONNECT;
END_IF
END_IF
CONNECT:
IF SysSockBind(ServerSocket, ADR(Addres), SIZEOF(Addres)) = Errors.ERR_OK THEN
status := LISTEN;
END_IF
LISTEN:
IF SysSockListen(ServerSocket, 1) = Errors.ERR_OK THEN
ConnectSocket := SysSockAccept(ServerSocket, ADR(Addres), SIZEOF(Addres), ADR(result));
END_IF
IF ConnectSocket <> -1 THEN
status := WORK;
END_IF
WORK:
-
Тему можно удалять, разобрался.
-
Теперь при закрытии сокета, SysSockAccept не возвращает новый сокет, что за фигня???
-
помещайте в SysSockAccept адрес сокета в другую переменную, не как у Вас
ConnectSocket := SysSockAccept(ServerSocket, ADR(Addres), SIZEOF(Addres), ADR(result));
а
ConnectSocket := SysSockAccept(ServerSocket, ADR(Client_Addres), SIZEOF(Client_Addres), ADR(result));
Ведь Ваша переменная Addres занята под настройки сервера.