Listing 6: Partial listing of dumsocks socket server

// file dumsocks.c

#ifdef OS_WIN32
WSADATA wsaData;
#endif

int server_port = 0;
int console_output = TRUE;
char d_log_file[256];

void main(int argc, char **argv)
{
   int isterm;

   if (argc == 1)
      {
      usage();
      exit(0);
      }

   if (!parse_comline(argc, argv))
      exit(0);

   if (!srv_initialize())
      exit(0);

   while(1)
      {
      if (ipc_server_wait())
         {
         isterm = process_request();
         (void)ipc_close_client();
         }

      if (isterm)
         break;
      }

#ifdef OS_WIN32
      WSACleanup();
#endif

   exit(0);
}

int srv_initialize(void)
{
   char localhost[128];
   int ret;

#ifdef OS_WIN32
   if (WSAStartup(WINSOCK_VERSION, &wsaData))
      {
      WSACleanup();
      return(FALSE);
      }
#endif

   if (!ipc_init(localHost, server_port))
      {
#ifdef OS_WIN32
      WSACleanup();
#endif
      return(FALSE);
      }

   if ((ret = sloc_initialize()) != SL_OK)
      {
#ifdef OS_WIN32
      WSACleanup();
#endif
      return(FALSE);
      }

   if ((ret = sloc_add(DM_SERVICE_NAME, 
                 localHost, server_port,
                 (char *)NULL)) != SL_OK)
      {
#ifdef OS_WIN32
      WSACleanup();
#endif
      return(FALSE);
      }

   return(TRUE);
}