socket_server_pos.hpp
Go to the documentation of this file.
00001 
00010 /*****************************************************************************
00011 ** Ifdefs
00012 *****************************************************************************/
00013 
00014 #ifndef ECL_DEVICES_SOCKET_SERVER_POS_HPP_
00015 #define ECL_DEVICES_SOCKET_SERVER_POS_HPP_
00016 
00017 /*****************************************************************************
00018 ** Cross platform
00019 *****************************************************************************/
00020 
00021 #include <ecl/config/ecl.hpp>
00022 #ifndef ECL_IS_MAC
00023 #ifdef ECL_IS_POSIX
00024 
00025 /*****************************************************************************
00026 ** Includes
00027 *****************************************************************************/
00028 
00029 #include <arpa/inet.h> // inet_addr()
00030 #include <sys/ioctl.h> // used in remaining()
00031 #include <errno.h>
00032 #include <sys/socket.h>
00033 
00034 #include "detail/socket_error_handler_pos.hpp"
00035 #include "detail/socket_exception_handler_pos.hpp"
00036 #include "traits.hpp"
00037 
00038 /*****************************************************************************
00039 ** Namespaces
00040 *****************************************************************************/
00041 
00042 namespace ecl {
00043 
00044 /*****************************************************************************
00045 ** Interface [SocketServer]
00046 *****************************************************************************/
00060 class SocketServer {
00061 public:
00062         /*********************
00063         ** C&D
00064         **********************/
00065         SocketServer() : is_open(false) {}; 
00076         SocketServer(const unsigned int &port_number) ecl_throw_decl(StandardException);
00077         virtual ~SocketServer() { close(); }; 
00079         /*********************
00080         ** Configuration
00081         **********************/
00092         bool open( const unsigned int& port_number ) ecl_throw_decl(StandardException);
00110         void close() { is_open = false; ::close(socket_fd); }
00111 
00112         bool open() const { return is_open; }
00113 
00114         /*********************
00115         ** Writing
00116         **********************/
00125         long write(const char &c) ecl_debug_throw_decl(StandardException) { return write(&c,1); }
00126 
00135         long write(const char *s, unsigned long n) ecl_debug_throw_decl(StandardException);
00136 
00143         void flush() {}
00144 
00145         /*********************
00146         ** Reading
00147         **********************/
00155         long remaining();
00174     long read(char &c) ecl_debug_throw_decl(StandardException) { return read(&c,1); }
00184     long read(char *s, const unsigned long &n) ecl_debug_throw_decl(StandardException);
00195     long peek(char*s, const unsigned long &n) ecl_debug_throw_decl(StandardException);
00196 
00197     /*********************
00198         ** Socket Specific
00199         **********************/
00208     int listen() ecl_throw_decl(StandardException);
00209 
00213         const Error& error() const { return error_handler; }
00214 
00215 private:
00216     int port;
00217     int socket_fd;
00218     int client_socket_fd;
00219     bool is_open;
00220     Error error_handler;
00221 };
00222 
00223 /*****************************************************************************
00224 ** Traits [Serial]
00225 *****************************************************************************/
00231 template <>
00232 class is_sink<SocketServer> : public True {};
00233 
00239 template <>
00240 class is_source<SocketServer> : public True {};
00241 
00247 template <>
00248 class is_sourcesink<SocketServer> : public True {};
00249 
00250 } // namespace ecl
00251 
00252 #endif  /* ECL_IS_POSIX */
00253 #endif  /* !ECL_IS_MAC */
00254 
00255 #endif /* ECL_DEVICES_SOCKET_SERVER_POS_HPP_ */


ecl_devices
Author(s): Daniel Stonier (d.stonier@gmail.com)
autogenerated on Thu Jan 2 2014 11:12:50