Socket/Protocols/INet: Extend INet6SocketAddress syntax to support more flexible...
[senf.git] / Socket / Protocols / GenericAddressingPolicy.cti
index 2eaf5c8..6cba6c2 100644 (file)
@@ -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 (Exception & 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 (Exception & e) {
+        e << "; could not connect to address \"" << addr << "\"";
+        throw;
+    }
 }
 #else
 template <class Address>
@@ -74,14 +84,25 @@ 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 (Exception & e) {
+        // TODO: identify socket by some meaningful attribute
+        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 (Exception & e) {
+        e << "; could not bind to address \"" << addr << "\"";
+        throw;
+    }
 }
 
 ///////////////////////////////cti.e///////////////////////////////////////