При создании сокета можно указать 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
?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго времени суток! Как можно добавить картинку в текст, что бы было такое