/* COISERVER - SERVER CONNESSION ORIENTED SU INTERNET PORT =4321*/ #include #include #include #include #include #include #define NSTRS 3 #define MSGLEN 32 main() { char c; int fromlen; register int i,j, s, s1, ns, nl, flag; struct sockaddr_in myname, fromname; char str1[1024]; fd_set ready; struct timeval wait; if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("server:socket"); exit(1); } myname.sin_family = AF_INET; myname.sin_port = htons(1234); myname.sin_addr.s_addr = INADDR_ANY; if (bind(s, &myname, sizeof myname) < 0) { perror("server: bind"); exit(1); } if (listen(s, 5) < 0) { perror("server: listen"); exit(1); } if ((s1 = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("server:socket"); exit(1); } myname.sin_family = AF_INET; myname.sin_port = htons(2468); myname.sin_addr.s_addr = INADDR_ANY; if (bind(s1, &myname, sizeof myname) < 0) { perror("server: bind"); exit(1); } if (listen(s1, 5) < 0) { perror("server: listen"); exit(1); } j =0; flag = 0; while(1){ FD_ZERO(&ready); FD_SET(s,&ready); if (flag) FD_SET(nl,&ready); wait.tv_sec =0; wait.tv_usec =0; if(select(FD_SETSIZE,&ready, (fd_set *)0,(fd_set *)0, &wait)<0){ perror("select"); continue; } if (FD_ISSET(s, &ready)) { nl = accept(s, &fromname, &fromlen); if (nl <= 0) {perror("accept1");exit(1);} ns = accept(s1,&fromname, &fromlen); if (ns <= 0) {perror("accept2");exit(1);} flag = 1; printf("connessione:%d %d\n", ns, nl); continue; } if ( (flag) && (FD_ISSET(nl,&ready)) ) { printf("Read eseguita %d\n",read(nl, str1,MSGLEN)); write(ns, str1,MSGLEN); } j++; if (j % 10000 == 0 ) printf("%d\n",j); }; close(s); exit(0); }