Повторное использование WSAEventSelect

_Vasilisk_
Дата: 09.07.2019 17:20:18
Есть такой код
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
_Vasilisk_
Дата: 09.07.2019 17:37:09
Нашел ошибку. Вместе с сокетом закрывался и Event. А Microsoft сэкономили на коде ошибки
Dimitry Sibiryakov
Дата: 09.07.2019 18:42:01

_Vasilisk_
Вместе с сокетом закрывался и Event.

В смысле в твоём коде он закрывался? Потому что автоматически вообще-то не должен по идее.

Posted via ActualForum NNTP Server 1.5

_Vasilisk_
Дата: 09.07.2019 19:23:24
Dimitry Sibiryakov
В смысле в твоём коде он закрывался?
Да.