/* * @param dest_ip : destination IP address eg. "192.168.1.1" * @param dest_port: destination Port * @param tries: re-connect times, * <=0: try infinite times. * >0: try definite times. * @ret -1: Error * >0: socket file descriptor. */ int socket_client::connect(const char *dest_ip, unsigned short dest_port, int tries) { int ret= -1; int fd = socket(AF_INET, SOCK_STREAM, 0); if(fd <= 0) { return -1; } set_fd_nonblock(fd); set_sockopt(fd,SOCK_OPT_REUSE, SO_REUSE_ON); set_sockopt(fd,SOCK_OPT_LINGER, SO_LINGER_ON); //set_sockopt(fd, SOCK_OPT_TCPNODELAY, 1); struct sockaddr_in addr; bzero((char *)&addr, sizeof(addr)); addr.sin_family = AF_INET; inet_aton(dest_ip, &addr.sin_addr); addr.sin_port = htons(dest_port); int count = 0; while(1) { if(::connect(fd, (const struct sockaddr *)&addr, sizeof(addr)) == 0) { ret =0; break; } else { if(errno == EINPROGRESS) { ret = async_connect_check(fd, &count, tries); break; } else if(errno == EISCONN) { ret = 0; break; } /* Re-try(connect) in case of other errors occur, * until a limited re-try times has reached. */ if((tries >0) && (++count > tries)) { ret = -1; break; } } sleep(1); } /* End of while(1).*/ if(ret >=0) { socket_conection_conf_t cnt; bzero(&cnt,sizeof(cnt)); cnt.fd =fd; strncpy(cnt.target_addr, dest_ip, sizeof(cnt.target_addr)); cnt.target_port = cnt.target_port; clients_conf.push_back(cnt); ep_add_fd(fd); return fd; } return -1; }
int main(int argc, char** argv){ int rx_mode = DMA_MODE,tx_mode = DMA_MODE; int recv_mode = RECEIVE_MODE; char ifname[10] = {0}, *bindstr; char rxif[128], *pif; int numproc = 4, i = 0; lib_init(); for(i=1; i<argc; i++){ if(!strncmp(argv[i], "-r", 2)){ sprintf(rxif, "%s", argv[i]+2); } } pif = rxif; sscanf(pif, "eth%d", &rx_port); sprintf(ifname, "eth%d", rx_port); sockfd = open_sock(ifname, rx_mode, tx_mode, recv_mode, numproc); if(sockfd < 0) { printf("open_sock %s failure!\n",ifname); } else { printf("open_sock %s success!\n",ifname); } bindstr = "1:2:3:4"; set_sockopt(sockfd,SET_BINDING,bindstr); start_proc(sockfd); printf("start now...\n"); while(1) { tIfStat rxstat; get_sockopt(sockfd, GET_IF_RXTX_STAT, (int *)&rxstat); //system("clear"); //write_in_file(rxstat.rx_bps, rxstat.rx_pps); db_insert(rxstat.rx_bps*8+rxstat.rx_pps*PAD_LEN*8, rxstat.rx_pps); printf("eth%d %lu bps, %u pps.\n", sockfd, rxstat.rx_bps*8+rxstat.rx_pps*PAD_LEN*8, rxstat.rx_pps); sleep(10); //system("clear"); } close_sock(sockfd); return 0; }
int con_server(int port, char* argv1) { int i=1; struct sockaddr_in serv_addr; int sfd; bzero(( char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(port); inet_pton(AF_INET, argv1, &serv_addr.sin_addr); if (flag==1) fprintf(stdout,"creating socket\n"); if ( (sfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stdout,"client: can't open stream socket\n"); exit(1); } //set_sockopt(sfd); //setsockopt(sfd, IPPROTO_TCP, TCP_CORK, &i, sizeof(i)); if (flag==1) fprintf(stdout,"connecting\n"); if ( connect( sfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { fprintf(stdout,"client: can't connect to server\n"); exit(2); } if (flag==1) fprintf(stdout,"connected!\n"); set_sockopt(sfd); //setsockopt(sfd, IPPROTO_TCP, TCP_CORK, &i, sizeof(i)); return sfd; }
int main(int argc, char**argv) { int sfd,ssfd; char num[10]; char clientID[22]; char filename[100]; int result; int taskSize; int exitCode; int numBytes; char *msg; char *taskID; char ACK[]="OK\n"; char lifetime[]="10\n"; Task *task; char *back; if (argc!=5) { fprintf(stdout,"usage: client <IP> <port> <port> <debug>"); exit(1); } if (strcmp(argv[4],"-debug")==0) flag=1; recover: if(flag == 1) fprintf(stdout,"con_server() to %s on port %s\n", argv[1], argv[2]); sfd=con_server(atoi(argv[2]), argv[1]); set_sockopt(sfd); if(flag == 1) fprintf(stdout,"con_server() to %s on port %s\n", argv[1], argv[3]); ssfd=con_server(atoi(argv[3]), argv[1]); if (flag==1) fprintf(stdout,"connection established!\n"); /*numBytes=send(sfd, lifetime, sizeof(lifetime), 0); if (numBytes<0) { fprintf(stdout, "main: send lifetime error\n"); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; }*/ while (1) { task = (Task *)malloc(sizeof(Task)); if (task==NULL) printf("failed to allocate memory in main loop\n"); memset(filename,'\0',sizeof(filename)); memset(clientID,'\0',sizeof(clientID)); memset(num, '\0', sizeof(num)); /*receive clientID*/ recv_wrapper(sfd, ssfd, clientID, 22); if (flag==1) { fprintf(stdout,"main: clientID: %s\n", clientID); } /*receive size of task*/ recv_wrapper(sfd, ssfd, num, 10); if (flag==1) { fprintf(stdout,"main: size_of_task: %s\n", num); } /*allocate memory for task description*/ taskSize=atoi(num); msg=malloc(sizeof(char)*(taskSize+1)); if (msg==NULL) { fprintf(stdout,"main: allocate memory failed\n"); exit (1); } memset(msg,'\0',taskSize+1); /*receive task description*/ recv_wrapper(sfd, ssfd, msg, taskSize); if (flag==1) { fprintf(stdout,"main:received: %s\n", msg); } /*send acknoledgement for the received task*/ numBytes=send(sfd, ACK,strlen(ACK),0); if (numBytes < 0) { fprintf(stdout,"main: Sent ACK %s failed\n", ACK); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } else { if (flag == 1) fprintf(stdout,"main: Sent ACK %s successful (%d)\n", ACK, numBytes); } parseExec(msg, task); exitCode = run_task(task); /*send results back to Falkon service*/ numBytes = sendResults(task, ssfd, sfd); if (numBytes < 0) { fprintf(stdout,"main: Send results failed\n"); recovery(sfd, ssfd); goto recover; } //free(task->taskID); //free(task->command); //free(task->directory); free(task); free(msg); //exit(1); } }
int main(int argc, char**argv) { int sfd,ssfd; if (argc!=5) { fprintf(stdout,"usage: client <IP> <port> <port> <debug>"); exit(1); } if (strcmp(argv[4],"-debug")==0) flag=1; //commented out to hopefully make it work with static compiling /* char hostname[100]; struct hostent *h; gethostname(hostname, 100); fprintf(stdout,"hostname: %s\n", hostname); if ((h = gethostbyname(hostname))!=NULL) { fprintf(stdout,"ip address: %s\n", inet_ntoa(*((struct in_addr *)h->h_addr))); } */ recover: fprintf(stdout,"con_server() to %s on port %s\n", argv[1], argv[2]); sfd=con_server(atoi(argv[2]), argv[1]); set_sockopt(sfd); fprintf(stdout,"con_server() to %s on port %s\n", argv[1], argv[3]); ssfd=con_server(atoi(argv[3]), argv[1]); if (flag==1) fprintf(stdout,"connection established!\n"); char num[10]; char clientID[22]; char filename[100]; int result; char *msg; char *taskID; char lifetime[]="10\n"; pid_t pid; int n; /*n=send(sfd, lifetime, sizeof(lifetime), 0); if (n<0) { fprintf(stdout, "main: send lifetime error\n"); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } char acknoledge[10]; memset(acknoledge, '\0', 10); read(sfd,acknoledge,sizeof(acknoledge)); printf("acknoledge: %s\n", acknoledge); fflush(stdout);*/ while (1) { memset(filename,'\0',sizeof(filename)); memset(clientID,'\0',sizeof(clientID)); memset(num, '\0', sizeof(num)); if (flag==1) { fprintf(stdout,"main: receiving from server\n"); fprintf(stdout,"main: sizeof clientID: %d\n", sizeof(clientID)); } int numBytes=0; int numBytesAll = 0; if (flag==1) { fprintf(stdout,"main:waiting to received %d bytes...\n", sizeof(clientID)); } while (numBytesAll < sizeof(clientID)) { numBytes = read(sfd,clientID,sizeof(clientID)); if (numBytes<0) { fprintf(stdout,"main: Receive clientID error after %d bytes received, when it was expecting %d...\n", numBytesAll, sizeof(clientID)); fprintf(stdout,"main: error description: %d\n", errno); recovery(sfd, ssfd); goto recover; } else if (numBytes==0) { fprintf(stdout,"main: Receive clientID error after %d bytes received, when it was expecting %d...\n", numBytesAll, sizeof(clientID)); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } else { if (flag == 1) fprintf(stdout,"main: Received %d bytes...\n", numBytes); } numBytesAll += numBytes; if (numBytesAll == 3) { if (strncasecmp(clientID, "end", 3)==0) { fprintf(stdout, "main: receive end notice, exit\n"); //should shut down gracefully... closing all sockets... //exit(0); goto recover; } } } if (flag==1) { fprintf(stdout,"main:just received %d bytes...\n", numBytesAll); } fflush(stdout); if (flag==1) { fprintf(stdout,"main: clientID: %s\n", clientID); } numBytesAll = 0; if (flag==1) { fprintf(stdout,"main:waiting to received %d bytes...\n", sizeof(num)); } while (numBytesAll < sizeof(num)) { numBytes = read(sfd,num,sizeof(num)); if (numBytes<0) { fprintf(stdout,"main: Receive task size error after %d bytes received, when it was expecting %d...\n", numBytesAll, sizeof(num)); fprintf(stdout,"main: error description: %d\n", errno); recovery(sfd, ssfd); goto recover; } else if (numBytes==0) { fprintf(stdout,"main: Receive task size error after %d bytes received, when it was expecting %d...\n", numBytesAll, sizeof(clientID)); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } else { if (flag == 1) fprintf(stdout,"main: Received %d bytes...\n", numBytes); } numBytesAll += numBytes; } if (flag==1) { fprintf(stdout,"main:just received %d bytes...\n", numBytesAll); } int taskSize=atoi(num); msg=malloc(sizeof(char)*(taskSize+1)); memset(msg,'\0',sizeof(msg)); if (msg==NULL) { fprintf(stdout,"main: allocate memory failed\n"); exit (1); } if (flag==1) { fprintf(stdout,"main:waiting to receive task description of %d bytes...\n", taskSize); //fprintf(fp,"main:received: %s\n", msg); } char buffer[10240]; numBytesAll = 0; while (numBytesAll < taskSize) { memset(buffer, 0, 10240); numBytes = read(sfd,buffer,taskSize); strcat(msg, buffer); if (numBytes<0) { fprintf(stdout,"main: Receive task failed after %d bytes received, when it was expecting %d...\n", numBytesAll, taskSize); fprintf(stdout,"main: error description: %d\n", errno); recovery(sfd, ssfd); goto recover; } else if (numBytes==0) { fprintf(stdout,"main: Receive task failed after %d bytes received, when it was expecting %d...\n", numBytesAll, sizeof(clientID)); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } else { if (flag == 1) fprintf(stdout,"main: Received %d bytes...\n", numBytes); } numBytesAll += numBytes; } if (flag==1) { fprintf(stdout,"main:jst received %d bytes...\n", numBytesAll); } if (flag==1) { fprintf(stdout,"main:received: %s\n", msg); } //commented out ACK numBytes=send(sfd, ACK,strlen(ACK),0); if (numBytes < 0) { fprintf(stdout,"main: Sent ACK %s failed\n", ACK); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } else { if (flag == 1) fprintf(stdout,"main: Sent ACK %s successful (%d)\n", ACK, numBytes); } fflush(stdout); taskID = getTaskID(msg); int exitCode; exitCode = parseExec(msg); free(msg); numBytes = sendResults(taskID, exitCode, argv, ssfd, sfd); if (numBytes < 0) { fprintf(stdout,"main: Send results failed\n"); //fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } } }