#include <windows.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
   WSADATA wsd;
   int rc;
   struct timeval tv = { 1, 0 };
   fd_set fdread, fdwrite, fdexcep;

   rc = WSAStartup(MAKEWORD(2,0), &wsd);
   if (rc != 0) {
     printf("WSAStartup failed: %d", rc);
     return 1;
   } 

   int fd = socket(AF_INET, SOCK_DGRAM, 0);
   if (fd < 0) {
     printf("Error in socket call: %d", WSAGetLastError());
     return 1;
   }
   
   FD_ZERO(&fdread); FD_ZERO(&fdwrite); FD_ZERO(&fdexcep);
   FD_SET(fd, &fdread); FD_SET(fd, &fdwrite); FD_SET(fd, &fdexcep);

   rc = select(fd + 1, &fdread, &fdwrite, &fdexcep, &tv);
   printf ("rc = %d\n", rc);
   printf ("readable? %s\n", FD_ISSET(fd, &fdread) ? "yes" : "no");
   printf ("writable? %s\n", FD_ISSET(fd, &fdwrite) ? "yes" : "no");
   printf ("exception? %s\n", FD_ISSET(fd, &fdexcep) ? "yes" : "no");

   FD_ZERO(&fdread); FD_ZERO(&fdwrite); FD_ZERO(&fdexcep);
   FD_SET(fd, &fdread);

   rc = select(fd + 1, &fdread, &fdwrite, &fdexcep, &tv);
   printf ("rc = %d\n", rc);
   printf ("readable? %s\n", FD_ISSET(fd, &fdread) ? "yes" : "no");

   FD_ZERO(&fdread); FD_ZERO(&fdwrite); FD_ZERO(&fdexcep);
   FD_SET(fd, &fdwrite);

   rc = select(fd + 1, &fdread, &fdwrite, &fdexcep, &tv);
   printf ("rc = %d\n", rc);
   printf ("writable? %s\n", FD_ISSET(fd, &fdwrite) ? "yes" : "no");
 
   FD_ZERO(&fdread); FD_ZERO(&fdwrite); FD_ZERO(&fdexcep);
   FD_SET(fd, &fdexcep);

   rc = select(fd + 1, &fdread, &fdwrite, &fdexcep, &tv);
   printf ("rc = %d\n", rc);
   printf ("exception? %s\n", FD_ISSET(fd, &fdexcep) ? "yes" : "no");
 
   return 0;
}

