]> git.tdb.fi Git - libs/net.git/blobdiff - source/net/sockaddr.cpp
Add a dynamic receiver class for more flexible packet handling
[libs/net.git] / source / net / sockaddr.cpp
index 9b41f81b948492dc077920dbe83ea06a80ea8a67..a3d3eed306626df06991cbc61f9c14e428a476e5 100644 (file)
@@ -1,7 +1,10 @@
+#include "sockaddr.h"
 #include <stdexcept>
+#include "platform_api.h"
 #include "inet.h"
 #include "inet6.h"
 #include "sockaddr_private.h"
+#include "unix.h"
 
 using namespace std;
 
@@ -16,16 +19,42 @@ SockAddr *SockAddr::new_from_sys(const SysAddr &sa)
                return new InetAddr(sa);
        case AF_INET6:
                return new Inet6Addr(sa);
+       case AF_UNIX:
+               return new UnixAddr(sa);
        default:
                throw invalid_argument("SockAddr::create");
        }
 }
 
-SockAddr::SysAddr::SysAddr():
-       size(sizeof(sockaddr_storage))
+SockAddr::SysAddr::SysAddr()
 {
        addr.ss_family = AF_UNSPEC;
 }
 
+
+int family_to_sys(Family f)
+{
+       switch(f)
+       {
+       case UNSPEC: return AF_UNSPEC;
+       case INET:   return AF_INET;
+       case INET6:  return AF_INET6;
+       case UNIX:   return AF_UNIX;
+       default: throw invalid_argument("family_to_sys");
+       }
+}
+
+Family family_from_sys(int f)
+{
+       switch(f)
+       {
+       case AF_UNSPEC: return UNSPEC;
+       case AF_INET:   return INET;
+       case AF_INET6:  return INET6;
+       case AF_UNIX:   return UNIX;
+       default: throw invalid_argument("family_from_sys");
+       }
+}
+
 } // namespace Net
 } // namespace Msp