I had been working on non-blocking udp socket. The code that I had developed generates a Window Message whenever there is any data to be read over the socket. Below is the code snippet:
void createSocket(HWND hwnd)
{
WSADATA wsa;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
exit(EXIT_FAILURE);
}
if((socketIdentifier = socket(AF_INET , SOCK_DGRAM , 0 )) == INVALID_SOCKET)
{
}
serverSocket.sin_family = AF_INET;
serverSocket.sin_addr.s_addr = INADDR_ANY;
serverSocket.sin_port = htons( PORT );
if( bind(socketIdentifier ,(struct sockaddr *)&serverSocket , sizeof(serverSocket)) == SOCKET_ERROR)
{
}
WSAAsyncSelect (socketIdentifier, hwnd, MY_MESSAGE_NOTIFICATION, FD_READ | FD_CONNECT | FD_CLOSE | FD_ACCEPT);
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd
{
createSocket()
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case MY_MESSAGE_NOTIFICATION:
{
switch (lParam)
{
case FD_ACCEPT:
break;
case FD_CONNECT:
break;
case FD_READ:
receiveAtSocket();
break;
case FD_CLOSE:
break;
}
}
break;
}
}
This code is working fine, and socket does not have to wait in call to snedto() or recvfrom(). Instead, A window Message is generated whenever data is ready to be read or written on the socket.
Now, I want to find out some other way of informing that data data is ready rather than a window message. i.e. I don't want any window message to be generated whenever there is data to be read or written on the socket.
Is there any other way of implementing the above mentioned functionality without using Window Messages> Please help me.
Waiting for help :(