Listing 7: Partial listing of dumsocks client application

// file dumsockc.c

#ifdef OS_WIN32
WSADATA wsaData;
SOCKET dmclientSocket;
SOCKADDR_IN sockClientAddr;
LPHOSTENT lpHostEnt;
#endif

#ifdef OS_UNIX
int dmclientSocket;
struct sockaddr_in sockClientAddr;
struct hostent *lpHostEnt;
#endif

int serverport = 0;
int socloc_port;
char serverhost[256];
char d_log_file[256];

void main(void)
{
   char *comm;
   int done = FALSE;

   if ((comm = malloc(DM_MAXCOMMAND + 1)) == NULL)
      {
      printf("dumsockc:insufficient memory to run program\n");
      exit(0);
      }

   if (!d_initialize())
      {
      free(comm);
      exit(0);
      }

   while(!done)
      {
      printf("dumsockc/%s[%d]> ", serverhost, serverport);
      gets(comm);

      if (!do_comm(comm))
         done = TRUE;
      }

   free(comm);

#ifdef OS_WIN32
   WSACleanup();
#endif
   printf("exit dumsockc\n");
   exit(0);
}

int d_initialize(void)
{
   char *thelist;
   int ret;

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

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

   if ((ret = sloc_find(DM_SERVICE_NAME, serverhost, &serverport,
        (char *)NULL)) != SL_OK)
      {
#ifdef OS_WIN32
      WSACleanup();
#endif
      return(FALSE);
      }

   if ((thelist = (char *)malloc(DM_MAXCOMMAND)) == (char *)NULL)
      {
#ifdef OS_WIN32
      WSACleanup();
#endif
      return(FALSE);
      }

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

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

   sloc_get_active_socloc(thelist, &socloc_port);
   free(thelist);
   strcpy(d_log_file, DUM_LOG_FILE);
   return(TRUE);
}