00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00024 #ifndef SCALESTACK_NETWORK_LOCAL_DATAGRAM_SOCKET_SERVICE_H
00025 #define SCALESTACK_NETWORK_LOCAL_DATAGRAM_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 local
00042 {
00043 namespace datagram
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
00079 socket_service(kernel::module& module,
00080 std::auto_ptr<datagram_service> datagram_service);
00081
00082 virtual ~socket_service();
00083
00090 void add_socket(const struct addrinfo* local, const struct addrinfo* peer);
00091
00096 void add_local_sockets(void);
00097
00101 void add_local_sockets(const std::string& addresses);
00102
00107 void add_peer_sockets(void);
00108
00112 void add_peer_sockets(const std::string& addresses);
00113
00114 private:
00115
00119 SCALESTACK_LOCAL
00120 socket_service(const socket_service&);
00121
00125 SCALESTACK_LOCAL
00126 socket_service& operator=(const socket_service&);
00127
00128 std::auto_ptr<datagram_service> _datagram_service;
00129 event::handler_service _handler_service;
00130 };
00131
00132 }
00133 }
00134 }
00135 }
00136
00137 #endif