iodrivers_base
IOStream.hpp
Go to the documentation of this file.
1 #ifndef IODRIVERS_BASE_IOSTREAM_HH
2 #define IODRIVERS_BASE_IOSTREAM_HH
3 
4 #include <base/Time.hpp>
5 
6 #include <unistd.h>
7 #include <netinet/in.h>
8 #include <stdio.h>
9 #include <sys/types.h>
10 #include <sys/socket.h>
11 
12 namespace iodrivers_base
13 {
19  class IOStream
20  {
21  public:
22  virtual ~IOStream();
23  virtual void waitRead(base::Time const& timeout) = 0;
24  virtual void waitWrite(base::Time const& timeout) = 0;
25  virtual size_t read(uint8_t* buffer, size_t buffer_size) = 0;
26  virtual size_t write(uint8_t const* buffer, size_t buffer_size) = 0;
27  virtual void clear() = 0;
28 
34  virtual int getFileDescriptor() const;
35  };
36 
38  class FDStream : public IOStream
39  {
40  bool m_auto_close;
41 
42  protected:
43  int m_fd;
44 
45  public:
46  static const int INVALID_FD = -1;
47 
48  FDStream(int fd, bool auto_close);
49  virtual ~FDStream();
50  virtual void waitRead(base::Time const& timeout);
51  virtual void waitWrite(base::Time const& timeout);
52  virtual size_t read(uint8_t* buffer, size_t buffer_size);
53  virtual size_t write(uint8_t const* buffer, size_t buffer_size);
54  virtual void clear();
55 
59  bool setNonBlockingFlag(int fd);
60 
61  virtual int getFileDescriptor() const;
62  };
63 
64  class UDPServerStream : public FDStream
65  {
66  public:
67  UDPServerStream(int fd, bool auto_close);
68  UDPServerStream(int fd, bool auto_close, struct sockaddr *si_other, size_t *s_len);
69  virtual size_t read(uint8_t* buffer, size_t buffer_size);
70  virtual size_t write(uint8_t const* buffer, size_t buffer_size);
71  protected:
72  struct sockaddr m_si_other;
74  unsigned int m_s_len;
75  };
76 }
77 
78 #endif
virtual int getFileDescriptor() const
Definition: IOStream.cpp:96
Definition: IOStream.hpp:64
virtual void clear()
Definition: IOStream.cpp:82
unsigned int m_s_len
Definition: IOStream.hpp:74
Definition: IOStream.hpp:38
virtual void clear()=0
virtual ~FDStream()
Definition: IOStream.cpp:28
struct sockaddr m_si_other
Definition: IOStream.hpp:72
virtual int getFileDescriptor() const
Definition: IOStream.cpp:16
virtual size_t write(uint8_t const *buffer, size_t buffer_size)
Definition: IOStream.cpp:73
Definition: IOStream.hpp:19
static const int INVALID_FD
Definition: IOStream.hpp:46
virtual size_t read(uint8_t *buffer, size_t buffer_size)
Definition: IOStream.cpp:59
bool m_si_other_dynamic
Definition: IOStream.hpp:73
virtual size_t read(uint8_t *buffer, size_t buffer_size)
Definition: IOStream.cpp:113
virtual size_t write(uint8_t const *buffer, size_t buffer_size)
Definition: IOStream.cpp:134
virtual size_t read(uint8_t *buffer, size_t buffer_size)=0
FDStream(int fd, bool auto_close)
Definition: IOStream.cpp:18
virtual void waitWrite(base::Time const &timeout)
Definition: IOStream.cpp:46
virtual void waitRead(base::Time const &timeout)=0
virtual void waitRead(base::Time const &timeout)
Definition: IOStream.cpp:33
virtual size_t write(uint8_t const *buffer, size_t buffer_size)=0
bool setNonBlockingFlag(int fd)
Definition: IOStream.cpp:85
virtual ~IOStream()
Definition: IOStream.cpp:15
UDPServerStream(int fd, bool auto_close)
Definition: IOStream.cpp:98
virtual void waitWrite(base::Time const &timeout)=0
int m_fd
Definition: IOStream.hpp:43