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); }