Socket: Move protocol into the socket body (as private base class) and allow non...
[senf.git] / Socket / Protocols / INet / INetProtocol.hh
index 98fe3f0..89daa57 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 //
 // Copyright (C) 2006
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-//     Stefan Bund <stefan.bund@fokus.fraunhofer.de>
+// Fraunhofer Institute for Open Communication Systems (FOKUS) 
+// Competence Center NETwork research (NET), St. Augustin, GERMANY 
+//     Stefan Bund <g0dil@berlios.de>
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -47,6 +47,28 @@ namespace senf {
     /// \addtogroup protocol_facets_group
     /// @{
 
+    class INetProtocol
+        : public virtual SocketProtocol
+    {
+    public:
+        void bindInterface(std::string const & iface) const;
+                                        ///< Bind socket to specific interface
+                                        /**< When a socket is bound to an interface, it will only
+                                             receive data received on that interface. If the
+                                             interface name is empty, the binding is removed.
+
+                                             \param[in] iface name of interface to bind to or empty
+                                                 to remove binding
+
+                                             \implementation Sets the SO_BINDTODEVICE socket option
+                                          */
+        std::string bindInterface();    ///< Get bound interface
+                                        /**< Returns the interface, the socket is currently bound
+                                             to. Returns the empty string, if not bound to any
+                                             interface.
+                                             \returns Bound interface name */
+    };
+
     /** \brief Protocol facet providing IPv4 Addressing related API
 
         This protocol facet introduces all the socket api protocol members which are related to IPv4
@@ -62,14 +84,6 @@ namespace senf {
         : public virtual SocketProtocol
     {
     public:
-        void connect(INet4SocketAddress const & address) const; ///< Connect to remote address
-                                        /**< \todo make this obsolete by allowing access to the
-                                             ClientSocketHandle from ConcreateSocketProtocol
-                                             \param[in] address Address to connect to */
-        void bind(INet4SocketAddress const & address) const; ///< Set local socket address
-                                        /**< \todo make this obsolete by allowing access to the
-                                             ClientSocketHandle from ConcreateSocketProtocol
-                                             \param[in] address Address to set */
     };
 
     /** \brief Protocol facet providing IPv6 Addressing related API
@@ -81,14 +95,6 @@ namespace senf {
         : public virtual SocketProtocol
     {
     public:
-        void connect(INet6SocketAddress const & address) const; ///< Connect to remote address
-                                        /**< \todo make this obsolete by allowing access to the
-                                             ClientSocketHandle from ConcreateSocketProtocol
-                                             \param[in] address Address to connect to */
-        void bind(INet6SocketAddress const & address) const; ///< Set local socket address
-                                        /**< \todo make this obsolete by allowing access to the
-                                             ClientSocketHandle from ConcreateSocketProtocol
-                                             \param[in] address Address to set */
     };
 
     /// @}