/[mailutils]/mailutils/doc/texinfo/stream.texi
ViewVC logotype

Diff of /mailutils/doc/texinfo/stream.texi

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by sroberts, Tue Dec 18 01:27:07 2001 UTC revision 1.4 by gray, Wed Sep 4 08:24:53 2002 UTC
# Line 114  Last action was @code{stream_close}. Line 114  Last action was @code{stream_close}.
114    
115  An example using @code{tcp_stream_create} to make a simple web client:  An example using @code{tcp_stream_create} to make a simple web client:
116    
 FIXME: this example won't build anymore.  
   
117  @example  @example
118  #include <stdlib.h>  @include http.c.texi
 #include <stdio.h>  
 #include <errno.h>  
 #include <string.h>  
 #include <unistd.h>  
 #include <sys/select.h>  
   
 #include <mailutils/io.h>  
   
 const char *wbuf = "GET / HTTP/1.0\r\n\r\n";  
 char rbuf[1024];  
   
 int  
 main(int argc, char **argv)  
 @{  
   int ret, off = 0, fd;  
   stream_t stream;  
   size_t nb;  
   fd_set fds;  
   
   argc = argc, argv = argv;  
   
   ret = tcp_stream_create (&stream);  
   if (ret != 0)  
     @{  
        fprintf (stderr, "tcp_stream_create: %s\n",  
                 mailutils_error(ret));  
        exit (EXIT_FAILURE);  
     @}  
   
 connect_again:  
   ret = stream_open (stream, "www.netscape.com", 80,  
                      MU_STREAM_NONBLOCK);  
   if (ret != 0)  
     @{  
        if (ret == MU_ERROR_EAGAIN)  
          @{  
              ret = stream_get_fd(stream, &fd);  
              if (ret != 0)  
                @{  
                    fprintf (stderr, "stream_get_fd: %s\n",  
                             mailutils_error(ret));  
                    exit (EXIT_FAILURE);  
                @}  
                FD_ZERO (&fds);  
                FD_SET (fd, &fds);  
                select (fd+1, NULL, &fds, NULL, NULL);  
                goto connect_again;  
           @}  
           fprintf (stderr, "stream_open: %s\n", mailutils_error (ret));  
           exit (EXIT_FAILURE);  
     @}  
   
     ret = stream_get_fd (stream, &fd);  
     if (ret != 0)  
       @{  
          fprintf(stderr, "stream_get_fd: %s\n", strerror(ret));  
          exit (EXIT_FAILURE);  
       @}  
   
 write_again:  
     ret = stream_write (stream, wbuf + off, strlen (wbuf), 0, &nb);  
     if (ret != 0 )  
       @{  
          if (ret == EAGAIN)  
            @{  
               FD_ZERO (&fds);  
               FD_SET (fd, &fds);  
               select (fd + 1, NULL, &fds, NULL, NULL);  
               off += nb;  
               goto write_again;  
            @}  
          fprintf (stderr, "stream_write: %s\n", strerror(ret));  
          exit (EXIT_FAILURE)  
       @}  
   
       if (nb != strlen (wbuf))  
         @{  
            fprintf(stderr, "stream_write: %s\n", "nb != wbuf length");  
            exit (EXIT_FAILURE);  
         @}  
   
       do  
         @{  
 read_again:  
            ret = stream_read (stream, rbuf, sizeof (rbuf), 0, &nb);  
            if (ret != 0)  
              @{  
                 if (ret == EAGAIN)  
                   @{  
                      FD_ZERO (&fds);  
                      FD_SET (fd, &fds);  
                      select (fd + 1, &fds, NULL, NULL, NULL);  
                      goto read_again;  
                    @}  
                  fprintf (stderr, "stream_read: %s\n", strerror(ret));  
                  exit(EXIT_FAILURE);  
               @}  
               write (2, rbuf, nb);  
          @} while (nb);  
   
          ret = stream_close (stream);  
          if (ret!= 0)  
            @{  
               fprintf (stderr, "stream_close: %s\n", strerror(ret));  
               exit (EXIT_FAILURE);  
            @}  
   
          stream_destroy (&stream, NULL);  
          exit (EXIT_SUCCESS);  
 @}  
119  @end example  @end example

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26