Raedok
Raedok

Reputation: 51

WSARecvFrom blocking

For some reason when I call WSARecvFrom the function does not return until something is received.

_socket = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, NULL, WS_OVERLAPPED);
...
sockaddr_in addr = ...
if(bind(_socket, (const sockaddr*)&addr, sizeof(addr)) != EXIT_SUCCESS) { ... }
...
HANDLE _handle = CreateIoCompletionPort((HANDLE)_socket, _ioHandle, NULL, NULL);
...
_recvOverlap->OVERLAP.hEvent = WSACreateEvent();
DWORD sz = 0, flag = 0;
return WSARecvFrom(_socket, _recvBuf, 1, &sz, &flag, (sockaddr*)_recvAddr, &_recvAddrSz, (LPWSAOVERLAPPED)_recvOverlap, NULL);

Upvotes: 2

Views: 704

Answers (1)

Remy Lebeau
Remy Lebeau

Reputation: 596307

Change WS_OVERLAPPED (which as a value of 0) to WSA_FLAG_OVERLAPPED (which has a value of 1) instead. You are not creating an overlapped socket correctly, so _recvOverlap is being ignored by WSARecvFrom().

Upvotes: 3

Related Questions