Logo
~Apps~
~Projects~
~Contact~

IOClass.cpp

Go to the documentation of this file.
00001 class IOClass : public ParserIO
00002 {
00003 public:
00004         IOClass()
00005         :socket(0)
00006         {}
00007         void read_text(char *,int *);
00008         void write_text(char *,int);
00009         void set_socket(int s) {
00010                 socket = s;
00011         }
00012         void set_parser(Parser *p) {
00013                 parser = p;
00014         }
00015 
00016 private:
00017         Parser *parser;
00018         int socket;     // socket
00019 };
00020 
00021 void IOClass::read_text(char *s,int *l)
00022 {
00023         fd_set rfds;
00024         int n;
00025 
00026         FD_ZERO(&rfds);
00027         FD_SET(socket, &rfds);
00028         n = select(socket + 1, &rfds, NULL, NULL, NULL);
00029         if (n == -1)
00030         {
00031                 perror("select() failed");
00032                 parser -> m_next_line = NULL;
00033                 return;
00034         }
00035         else
00036         if (!n)         // huh
00037         {
00038                 printf("select() returns 0 (?)\n");
00039                 parser -> m_next_line = NULL;
00040                 return;
00041         }
00042         if (FD_ISSET(socket, &rfds))
00043         {
00044                 *l = read(socket, s, *l);
00045                 if (*l == -1)
00046                 {
00047                         perror("read() failed");
00048                         parser -> m_next_line = NULL;
00049                 }
00050                 else
00051                 if (*l == 0)
00052                 {
00053                         parser -> m_next_line = NULL;
00054                 }
00055                 else
00056                 {
00057                         printf("read() returns %d\n",*l);
00058                         while (s[strlen(s) - 1] == 13 || s[strlen(s) - 1] == 10)
00059                                 s[strlen(s) - 1] = 0;
00060                 }
00061         }
00062         else
00063         {
00064                 printf("socket did not release select() call\n");
00065                 parser -> m_next_line = NULL;
00066         }
00067 }
00068 
00069 void IOClass::write_text(char *s,int l)
00070 {
00071         if (write(socket, s, l) == -1)
00072         {
00073                 perror("write() failed");
00074         }
00075 }
00076 
Page, code, and content Copyright (C) 2005 by Anders Hedström
Generated on Mon Aug 29 20:21:47 2005 for C++ Sockets by  doxygen 1.4.4