/* * Name: echo_string * Description: */ void echo_string (int fd) { int n; char buf[MAXLINE]; again: while ((n = recv(fd, buf, MAXLINE, 0)) > 0) {/*read client's input, then write back, repeating...*/ printf("server receive: (n=%d) %s", n, buf); os_writen(fd, buf, n); } if (n < 0 && errno == EINTR) goto again; else if (n < 0) os_err_sys("read error"); return ; } /* ----- end of function echo+string ----- */
static void tcppry_forward(int sd1, int sd2 ) { char buf[FORWARDBUF_MAXSZ]; int sz; fd_set rset; int fds[2] = {sd1,sd2}; int i; int max = sd1 > sd2 ? sd1 +1 : sd2 +1; while ( 1 ) { FD_ZERO(&rset); FD_SET(sd1, &rset); FD_SET(sd2, &rset); /* 等待数据 */ int ret = select(max,&rset,NULL,&rset,NULL); if( ret < 1 ) { return; } for( i = 0; i < 2; i ++ ) { if( FD_ISSET(fds[i], &rset) ) { /* 把数据从一个socket转发到另外一个socket */ sz = recv(fds[i],buf,FORWARDBUF_MAXSZ,0); if ( sz > 0 ) { if( os_writen(fds[(i+1)%2],buf,sz) == 0 ) sz = 1; } if( sz <= 0 ) { return ; } } } } }