Datagram сокет с поддержкой overlapped I/O operations

209
17 марта 2018, 17:53

При создании сокета можно указать WSA_FLAG_OVERLAPPED, что это означает? В MSDN достаточно скудная информация. Что это вообще за технология overlapped I/O operations (перекрывающиеся операции ввода вывода?)?

Например можно рассмотреть класс реализующий работу с таким сокетом:

  class Socket
  {
     Socket();
     void StartRecv();
     bool ResetRecv(Bytes& buffer, DWORD& a_dwIPAdress);
     HANDLE GetReadEvent();
     void Close();
  private:
     WSAOVERLAPPED  _overlapped;
     SOCKET        _socket;
     Bytes         _buffer;
  };

  Socket()
  {
       ::WSAStartup(...);
       SecureZeroMemory((PVOID) &_overlapped, sizeof(WSAOVERLAPPED) );
       _overlapped.hEvent = ::WSACreateEvent();
       _socket = ::WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED);
        bind(....)
  }
  void StartRecv()
  {
       ::WSARecvFrom(_socket, &m_DataBuf, 1, &temp, 0,(sockaddr*)&m_client_addr, &client_addr_size, &_overlapped, NULL);
  }
  bool ResetRecv(Bytes& buffer)
  {
      ::WSAGetOverlappedResult(_socket, &_verlapped, &BytesTransferred, FALSE, &Flags);
      buffer = _buffer;
      HANDLE tempHandle = _overlapped.hEvent;
      ::ZeroMemory(&_overlapped, sizeof(WSAOVERLAPPED));
      _overlapped.hEvent = tempHandle;
      ::WSAResetEvent(m_Overlapped.hEvent);
  }

Как работает этот класс? Мы должны ожидать _overlapped.hEvent, если дождались вызвать StartRecv потом ResetRecv и снова ждать _overlapped.hEvent?

READ ALSO
Удаляется DLL из SysWOW64 после перезагрузки

Удаляется DLL из SysWOW64 после перезагрузки

Пишу инсталятор на InnoSetup для своей программы

195
добавить картинку в textView

добавить картинку в textView

Доброго времени суток! Как можно добавить картинку в текст, что бы было такое

175
Можно, ли перевести String в код java

Можно, ли перевести String в код java

В Python есть метод exec(), есть ли такое в Java?

189
TFS и автотесты на Java

TFS и автотесты на Java

Добрый день!

226