From 4c1f0fe5c89a721936c92342e26c59112c70cd8a Mon Sep 17 00:00:00 2001 From: jkaeber <jkaeber@wiback.org> Date: Tue, 4 Mar 2008 08:30:57 +0000 Subject: [PATCH] added address info to socket related SystemExceptions --- Socket/Protocols/GenericAddressingPolicy.cti | 28 ++++++++++++++++--- Socket/Protocols/Raw/LLAddressing.cci | 7 +++++ Socket/Protocols/Raw/LLAddressing.hh | 5 ++++ Socket/Protocols/UN/UNAddressing.cc | 2 +- Socket/Protocols/UN/UNDatagramSocketHandle.cc | 7 +---- 5 files changed, 38 insertions(+), 11 deletions(-) diff --git a/Socket/Protocols/GenericAddressingPolicy.cti b/Socket/Protocols/GenericAddressingPolicy.cti index 2eaf5c888..7942fe34c 100644 --- a/Socket/Protocols/GenericAddressingPolicy.cti +++ b/Socket/Protocols/GenericAddressingPolicy.cti @@ -42,7 +42,12 @@ peer(SocketHandle<SPolicy> handle, Address & addr, typename IfCommunicationPolicyIs<SPolicy,ConnectedCommunicationPolicy>::type *) { addr.clear(); - do_peer(handle,addr.sockaddr_p(),addr.sockaddr_len()); + try { + do_peer(handle,addr.sockaddr_p(),addr.sockaddr_len()); + } catch (SystemException & e) { + e << "; could not get peer for address \"" << addr << "\""; + throw; + } } #else template <class Address> @@ -59,7 +64,12 @@ prefix_ void senf::GenericAddressingPolicy<Address>:: connect(SocketHandle<SPolicy> handle, Address const & addr, typename IfCommunicationPolicyIs<SPolicy,ConnectedCommunicationPolicy>::type *) { - do_connect(handle,addr.sockaddr_p(),addr.sockaddr_len()); + try { + do_connect(handle,addr.sockaddr_p(),addr.sockaddr_len()); + } catch (SystemException & e) { + e << "; could not connect to address \"" << addr << "\""; + throw; + } } #else template <class Address> @@ -74,14 +84,24 @@ prefix_ void senf::GenericAddressingPolicy<Address>::local(FileHandle handle, Address & addr) { addr.clear(); - do_local(handle,addr.sockaddr_p(),addr.sockaddr_len()); + try { + do_local(handle,addr.sockaddr_p(),addr.sockaddr_len()); + } catch (SystemException & e) { + e << "; could not get name for address \"" << addr << "\""; + throw; + } } template <class Address> prefix_ void senf::GenericAddressingPolicy<Address>::bind(FileHandle handle, Address const & addr) { - do_bind(handle,addr.sockaddr_p(),addr.sockaddr_len()); + try { + do_bind(handle,addr.sockaddr_p(),addr.sockaddr_len()); + } catch (SystemException & e) { + e << "; could not bind to address \"" << addr << "\""; + throw; + } } ///////////////////////////////cti.e/////////////////////////////////////// diff --git a/Socket/Protocols/Raw/LLAddressing.cci b/Socket/Protocols/Raw/LLAddressing.cci index 1245a10ec..1054845e6 100644 --- a/Socket/Protocols/Raw/LLAddressing.cci +++ b/Socket/Protocols/Raw/LLAddressing.cci @@ -114,6 +114,13 @@ prefix_ unsigned senf::LLSocketAddress::sockaddr_len() return sizeof(addr_); } +prefix_ std::ostream & senf::operator<<(std::ostream & os, LLSocketAddress const & llAddr) +{ + // TODO: expose more bytes from sockaddr_ll addr_ + os << "[some LLSocketAddress]"; + return os; +} + ///////////////////////////////cci.e/////////////////////////////////////// #undef prefix_ diff --git a/Socket/Protocols/Raw/LLAddressing.hh b/Socket/Protocols/Raw/LLAddressing.hh index 2a796b52f..bd82689c7 100644 --- a/Socket/Protocols/Raw/LLAddressing.hh +++ b/Socket/Protocols/Raw/LLAddressing.hh @@ -155,6 +155,11 @@ namespace senf { }; /// @} + + /** \brief Write link layer address + \related LLSocketAddress + */ + std::ostream & operator<<(std::ostream & os, LLSocketAddress const & llAddr); } ///////////////////////////////hh.e//////////////////////////////////////// diff --git a/Socket/Protocols/UN/UNAddressing.cc b/Socket/Protocols/UN/UNAddressing.cc index 1e01e513d..8eab74b72 100644 --- a/Socket/Protocols/UN/UNAddressing.cc +++ b/Socket/Protocols/UN/UNAddressing.cc @@ -83,7 +83,7 @@ prefix_ unsigned senf::UNSocketAddress::sockaddr_len() return sizeof(addr_); } -prefix_ std::ostream & operator<<(std::ostream & os, +prefix_ std::ostream & senf::operator<<(std::ostream & os, senf::UNSocketAddress::UNSocketAddress const & addr) { os << addr.path(); diff --git a/Socket/Protocols/UN/UNDatagramSocketHandle.cc b/Socket/Protocols/UN/UNDatagramSocketHandle.cc index 75866830e..d1b66bd4f 100644 --- a/Socket/Protocols/UN/UNDatagramSocketHandle.cc +++ b/Socket/Protocols/UN/UNDatagramSocketHandle.cc @@ -48,12 +48,7 @@ prefix_ void senf::UNDatagramSocketProtocol::init_client() const prefix_ void senf::UNDatagramSocketProtocol::init_client(UNSocketAddress const & address) const { init_client(); - try { - clientHandle().bind(address); - } catch (SystemException & e) { - e << "; could not bind to address \"" << address.path() << "\""; - throw; - } + clientHandle().bind(address); } ///////////////////////////////cc.e//////////////////////////////////////// -- GitLab