Skip to content

Instantly share code, notes, and snippets.

@gene9
Forked from igorzi/gist:1169397
Created September 2, 2016 20:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gene9/fb115ffdaa4e9bbd66f1c68b60bd2d3b to your computer and use it in GitHub Desktop.
Save gene9/fb115ffdaa4e9bbd66f1c68b60bd2d3b to your computer and use it in GitHub Desktop.
#ifndef UNICODE
#define UNICODE
#endif
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <Ws2tcpip.h>
#include <stdio.h>
int __cdecl main()
{
WSADATA wsaData;
WSABUF DataBuf;
WSAOVERLAPPED Overlapped;
SOCKET RecvSocket = INVALID_SOCKET;
struct sockaddr_in RecvAddr;
struct sockaddr_in SenderAddr;
int SenderAddrSize = sizeof (SenderAddr);
u_short Port = 27015;
char RecvBuf[65507];
int BufLen = 65507;
DWORD BytesRecv = 0;
DWORD Flags = 0;
int err = 0;
int rc;
int retval = 0;
DWORD bytes;
ULONG_PTR key;
OVERLAPPED* o;
//-----------------------------------------------
// Initialize Winsock
rc = WSAStartup(MAKEWORD(2, 2), &wsaData);
SecureZeroMemory((PVOID) &Overlapped, sizeof(WSAOVERLAPPED) );
HANDLE iocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 1);
// Create a receiver socket to receive datagrams
RecvSocket = WSASocket(AF_INET,
SOCK_DGRAM,
IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED);
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(Port);
RecvAddr.sin_addr.s_addr = inet_addr("0.0.0.0");
CreateIoCompletionPort((HANDLE)RecvSocket, iocp, (ULONG_PTR)RecvSocket, 0);
rc = bind(RecvSocket, (SOCKADDR *) & RecvAddr, sizeof (RecvAddr));
DataBuf.len = 0;
DataBuf.buf = 0;
Flags = MSG_PEEK;
rc = WSARecv(RecvSocket,
&DataBuf,
1,
&BytesRecv,
&Flags,
&Overlapped, NULL);
closesocket(RecvSocket);
GetQueuedCompletionStatus(iocp, &bytes, &key, &o, INFINITE);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment