previous | start | next

Example

    1   
    2   void rlogind(int r_in, int r_out, int l_in, int l_out) 
    3   {
    4     fd_set in = 0, out;
    5     int want_l_write = 0, want_r_write = 0;
    6     int want_l_read = 1, want_r_read = 1;
    7     int eof = 0, tsize, fsize, wret;
    8     char fubf[BSIZE], tbuf[BSIZE];
    9   
   10     fcntl(r_in, F_SETFL, O_NONBLOCK);
   11     fcntl(r_out, F_SETFL, O_NONBLOCK);
   12     fcntl(l_in, F_SETFL, O_NONBLOCK);
   13     fcntl(l_out, F_SETFL, O_NONBLOCK);
   14   
   15     while(!eof) {
   16       FD_ZERO(&in);
   17       FD_ZERO(&out);
   18       if(want_l_read) 
   19         FD_SET(l_in, &in);
   20       if(want_r_read) 
   21         FD_SET(r_in, &in);
   22       if(want_l_write) 
   23         FD_SET(l_out, &in);
   24       if(want_r_write) 
   25         FD_SET(r_out, &in);
   26   
   27       select(MAXFD, &in, &out, 0, 0);
   28       if (FD_ISSET(l_in, &in)) {
   29         if ((tsize=read(l_in, tbuf, BSIZE)) > 0 ) {
   30           want_l_read = 0;
   31           want_r_write = 1;
   32         } else 
   33           eof = 1;
   34       }
   35       if (FD_ISSET(r_in, &in)) {
   36         if ((tsize=read(l_in, tbuf, BSIZE)) > 0 ) {
   37           want_r_read = 0;
   38           want_l_write = 1;
   39         } else 
   40           eof = 1;
   41       }
   42       ...
          }
        }


previous | start | next