Цитата Сообщение от lazy Посмотреть сообщение
у меня еще закрытие сокетов происходит в два этапа SysSockShutdown отдельно от SysSockClose и я у всех проверяю чо там они возвращают.
как то так:

ST_BREAK:
o_dnRes := BOOL_TO_DINT ( SysSockShutdown( m_dnSocket, 2 ) );
CASE i_pOptions^.ePCL OF
OVEN_100: m_b := o_dnRes = 1;
OVEN_110: m_b := o_dnRes = 1;
OVEN_110_v2: m_b := o_dnRes = 0;
END_CASE
IF m_b THEN
o_eCondition := ST_CLOSE;
END_IF

ST_CLOSE:
o_dnRes := BOOL_TO_DINT( SysSockClose ( m_dnSocket ) );
CASE i_pOptions^.ePCL OF
OVEN_100: m_b := o_dnRes = 1;
OVEN_110: m_b := o_dnRes = 0;
OVEN_110_v2: m_b := o_dnRes = 1;
END_CASE
IF m_b THEN
m_dnSocket := SOCKET_INVALID;
o_eCondition := ST_EXPECT;
END_IF
а что у Вас программа делает, если обнаружилась ошибка при закрытии сокета?