diff --git a/posix/socket.cpp b/posix/socket.cpp index 71cea664..bd87416b 100644 --- a/posix/socket.cpp +++ b/posix/socket.cpp @@ -134,15 +134,26 @@ socket::operator= (socket &&rhs) noexcept /////////////////////////////////////////////////////////////////////////////// void +socket::bind (sockaddr const &addr) +{ + auto const size = addr.sa_family == AF_INET ? sizeof (sockaddr_in ) + : addr.sa_family == AF_INET6 ? sizeof (sockaddr_in6) + : throw std::runtime_error ("Unhandled sockaddr type"); + + cruft::posix::error::try_call ( + ::bind, + native (), + &addr, + size + ); +} + + +//----------------------------------------------------------------------------- +void socket::bind (sockaddr_in const &addr) { - cruft::posix::error::try_code ( - ::bind ( - native (), - reinterpret_cast (&addr), - sizeof (addr) - ) - ); + return bind (reinterpret_cast (addr)); } diff --git a/posix/socket.hpp b/posix/socket.hpp index 954165ac..8b9f272e 100644 --- a/posix/socket.hpp +++ b/posix/socket.hpp @@ -44,6 +44,7 @@ namespace cruft::posix { // because windows... ~socket (); + void bind (::sockaddr const&); void bind (::sockaddr_in const&); void connect (::sockaddr_in const&);