Introduction

I created this class while trying to avoid having recv hang/block indefinitely in a simple client application I was working on, without using MFC.
recv can hang for a variety of reasons most common is untimely calling of recv or calling it when the remote server doesn't send data it was supposed to send, e.g.: because of a malformed request.

What we do here is first issue a Send request, if our request can be fulfilled data will be sent immediately and return value of Send will be the length of data actually sent. Otherwise
our request will be queued and Send will return WSAEWOULDBLOCK. The Winsock subsystem will then notify us when it is possible to send our data by signaling the event we attached to
the socket earlier. At that point we call WSAEnumNetworkEvents to make sure the event is an FD_WRITE if it is not we continue waiting for FD_WRITE (if dwTimeOut is greater than zero).