/* 
 *  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  ----- */
Exemple #2
0
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 ;
                }
            }
        }
    }

}