00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00024 #ifndef SCALESTACK_NETWORK_IP_UDP_SOCKET_SERVICE_H
00025 #define SCALESTACK_NETWORK_IP_UDP_SOCKET_SERVICE_H
00026
00027 #include <memory>
00028 #include <string>
00029
00030 #include <scalestack/event/handler_service.h>
00031 #include <scalestack/kernel/macros.h>
00032 #include <scalestack/kernel/service.h>
00033
00034 namespace scalestack
00035 {
00036 namespace network
00037 {
00038
00039 class datagram_service;
00040
00041 namespace ip
00042 {
00043 namespace udp
00044 {
00045
00049 class SCALESTACK_API socket_service: public kernel::service
00050 {
00051 public:
00052
00059 static void local_options(kernel::module& module,
00060 const std::string& addresses);
00061
00068 static void peer_options(kernel::module& module,
00069 const std::string& addresses);
00070
00081 socket_service(kernel::module& module,
00082 std::auto_ptr<datagram_service> datagram_service,
00083 const std::string& default_host,
00084 const std::string& default_port);
00085
00086 virtual ~socket_service();
00087
00094 void add_socket(const struct addrinfo* local, const struct addrinfo* peer);
00095
00100 void add_local_sockets(void);
00101
00105 void add_local_sockets(const std::string& addresses);
00106
00111 void add_peer_sockets(void);
00112
00116 void add_peer_sockets(const std::string& addresses);
00117
00118 private:
00119
00123 SCALESTACK_LOCAL
00124 socket_service(const socket_service&);
00125
00129 SCALESTACK_LOCAL
00130 socket_service& operator=(const socket_service&);
00131
00132 std::auto_ptr<datagram_service> _datagram_service;
00133 std::string _default_host;
00134 std::string _default_port;
00135 event::handler_service _handler_service;
00136 };
00137
00138 }
00139 }
00140 }
00141 }
00142
00143 #endif