Из CoDeSys я вижу как сокет переходит в состояние STC_CLOSED, а затем STC_EXPECT и его манипулятор становится SOCKET_INVALID.
Закрываются и открываются порты состоянием i_pOptions^.bEnable и переводом родителя в состояние ET_UNKNOWN. За один цикл ПЛК происходит открытие или закрытие одного сокета.

ET_UNKNOWN:
(* open or close sockets *)
FOR m_nI := 0 TO SOCKETS_ DO
m_aSockets[m_nI] ( i_pOptions := ADR( i_pOptions^[m_nI] ) );
IF m_aSockets[m_nI].i_pOptions^.bEnable THEN
IF m_aSockets[m_nI].o_eCondition <> STC_WORK THEN
EXIT;
END_IF
ELSE
IF m_aSockets[m_nI].o_eCondition <> STC_EXPECT THEN
EXIT;
END_IF
END_IF
END_FOR
IF m_nI > SOCKETS_ THEN
o_eCondition := ET_READY;
END_IF