PDA

Просмотр полной версии : ПЛК 304 и SysSockAccept



CSharp
28.11.2014, 20:18
При попытке подключиться вылетает иключение в контролле.

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:

CSharp
29.11.2014, 09:11
Тему можно удалять, разобрался.

CSharp
14.12.2014, 10:32
Теперь при закрытии сокета, SysSockAccept не возвращает новый сокет, что за фигня???

Трофимов Артем
15.12.2014, 10:12
помещайте в SysSockAccept адрес сокета в другую переменную, не как у Вас
ConnectSocket := SysSockAccept(ServerSocket, ADR(Addres), SIZEOF(Addres), ADR(result));

а

ConnectSocket := SysSockAccept(ServerSocket, ADR(Client_Addres), SIZEOF(Client_Addres), ADR(result));

Ведь Ваша переменная Addres занята под настройки сервера.