Есть такой код
FEvent := WSACreateEvent;
FSocket := INVALID_SOCKET;
procedure CreateSocket;
begin
FSocket := SockCheck(socket(...));
SockCheck(connect(FSocket, ....))
SockCheck(WSAEventSelect(FSocket, FEvent, FD_READ or FD_WRITE or FD_CLOSE));
end;
procedure DestroySocket;
begin
CloseSocket(FSocket);
FSocket := INVALID_SOCKET;
end;
procedure DoProcess;
begin
if FSocket = INVALID_SOCKET then
CreateSocket;
........
end;
Как это работает: приходит команда, я подключаюсь (если еще не был подключен) к удаленному серверу и работаю с ним. Если сервер закрывает соединения, ко мне приходит FD_CLOSE и я закрываю свой сокет. А потом, при необходимости, создаю новый сокет и ассоциирую его с тем же событием FEvent.
Сейчас при повторном вызове я получаю ошибку Code: 10038. Сделана попытка выполнить операцию на объекте, не являющемся сокетом.
Я чего-то не закрываю? Или повторное использование Event запрещено в принципе?
С уважением, Vasilisk