intbind2bind(int port1,int port2) { int fd1,fd2,sockfd1,sockfd2; structsockaddr_inclient1,client2; int size1,size2; int pid;
if((fd1=create_socket())==0) exit(0); if((fd2=create_socket())==0) exit(0); printf("binding port %d......",port1); fflush(stdout); if(create_serv(fd1,port1)==0) { close(fd1); exit(0); } printf("ok\r\n"); printf("binding port %d......",port2); fflush(stdout); if(create_serv(fd2,port2)==0) { close(fd2); exit(0); } printf("ok\r\n"); size1=size2=sizeof(struct sockaddr); while(1) { printf("waiting for response on port %d.........\n",port1); if((sockfd1=accept(fd1,(struct sockaddr *)&client1,(socklen_t *)&size1))<0) { perror("accept1 error"); continue; } printf("accept a client on port %d from %s,waiting another on port %d....\n",port1,inet_ntoa(client1.sin_addr),port2); if((sockfd2=accept(fd2,(struct sockaddr *)&client2,(socklen_t *)&size2))<0) { perror("accept2 error"); close(sockfd1); continue; } printf("accept a client on port %d from %s\n",port2,inet_ntoa(client2.sin_addr)); pid=fork(); if(pid==0) transdata(sockfd1,sockfd2); //sleep(2); close(sockfd1); close(sockfd2); } }
intconn2conn(char *host1,int port1,char *host2,int port2) { int sockfd1,sockfd2; int pid; fd_set fds; int l; int result; char buffer[MAXSIZE];
while(1) { if((sockfd1=create_socket())==0) exit(0); if((sockfd2=create_socket())==0) exit(0); printf("[+] make a connection to %s:%d....\r\n",host1,port1); fflush(stdout); if(client_connect(sockfd1,host1,port1)==0) { printf("[-] connect to host1 failed\r\n"); close(sockfd1); close(sockfd2); continue; } printf("[+] host1 connected\r\n"); l=0; memset(buffer,0,MAXSIZE); //fixed by Twi1ight 2012.09.12 while(1) { FD_ZERO(&fds); FD_SET(sockfd1, &fds); if (select(sockfd1+1, &fds, NULL, NULL, NULL) < 0 ) { if (errno == EINTR) continue; break; }
if (FD_ISSET(sockfd1, &fds)) { l=read(sockfd1, buffer, MAXSIZE); break; } sleep(5); } if(l<=0) { printf("[-] there is a error...Create a new connection.\r\n"); continue; } while(1) { printf("[+] make a connection to %s:%d....\r\n",host2,port2); fflush(stdout); if(client_connect(sockfd2,host2,port2)==0) { printf("[-] connect to host2 failed\r\n"); close(sockfd1); close(sockfd2); continue; } if(write(sockfd2,buffer,l) < 0) { printf("[-] send failed.\r\n"); continue; } l=0; memset(buffer,0,MAXSIZE); break; } printf("[+] all hosts connected!\r\n"); pid=fork(); if(pid==0) transdata(sockfd1,sockfd2); //sleep(2); close(sockfd1); close(sockfd2); } }
voidtransdata(int fd1,int fd2) { structtimevaltimeset; fd_set readfd,writefd; int result,i=0; char read_in1[MAXSIZE],send_out1[MAXSIZE]; char read_in2[MAXSIZE],send_out2[MAXSIZE]; int read1=0,totalread1=0,send1=0; int read2=0,totalread2=0,send2=0; int sendcount1,sendcount2; int maxfd; structsockaddr_inclient1,client2; int structsize1,structsize2; char host1[20],host2[20]; int port1=0,port2=0; char tmpbuf1[100],tmpbuf2[100];