Socket: fixed bug in readfrom where socklen was not set
[senf.git] / Socket / ReadWritePolicy.hh
index 7d7a537..24d5cea 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
@@ -26,8 +26,8 @@
     \todo ReadWritePolicy.test.cc
  */
 
-#ifndef HH_ReadWritePolicy_
-#define HH_ReadWritePolicy_ 1
+#ifndef HH_SENF_Socket_ReadWritePolicy_
+#define HH_SENF_Socket_ReadWritePolicy_ 1
 
 // Custom includes
 #include "SocketPolicy.hh"
@@ -58,21 +58,27 @@ namespace senf {
                                              \param[in] buffer address of buffer to write data to
                                              \param[in] size size of buffer
                                              \returns number of bytes read */
-        template <class Policy>
-        static unsigned readfrom(ClientSocketHandle<Policy> handle, char * buffer, unsigned size,
-                                 typename Policy::AddressingPolicy::Address & address,
+#       ifndef DOXYGEN
+        template <class SPolicy>
+        static unsigned readfrom(ClientSocketHandle<SPolicy> handle, char * buffer, unsigned size,
+                                 typename SPolicy::AddressingPolicy::Address & address,
                                  typename IfCommunicationPolicyIs<
-                                     Policy,UnconnectedCommunicationPolicy>::type * = 0);
+                                     SPolicy,UnconnectedCommunicationPolicy>::type * = 0);
+#       else
+        template <class SPolicy>
+        static unsigned readfrom(ClientSocketHandle<SPolicy> handle, char * buffer, unsigned size,
+                                 typename Policy::AddressingPolicy::Address & address);
                                         ///< read data from socket returning peer address
                                         /**< \param[in] handle socket handle to read from
                                              \param[in] buffer address of buffer to write data to
                                              \param[in] size size of buffer
                                              \param[out] address peer address
                                              \returns number of bytes read */
+#       endif
 
     private:
         static unsigned do_readfrom(FileHandle handle, char * buffer, unsigned size,
-                                    struct ::sockaddr * addr, socklen_t len);
+                                    struct ::sockaddr * addr, socklen_t * len);
     };
 
     /** \brief ReadPolicy for unreadable sockets
@@ -91,10 +97,15 @@ namespace senf {
      */
     struct WriteablePolicy : public WritePolicyBase
     {
-        template <class Policy>
-        static unsigned write(ClientSocketHandle<Policy> handle, char const * buffer, unsigned size,
+#       ifndef DOXYGEN
+        template <class SPolicy>
+        static unsigned write(ClientSocketHandle<SPolicy> handle, char const * buffer, unsigned size,
                               typename IfCommunicationPolicyIs<
-                                  Policy,ConnectedCommunicationPolicy>::type * = 0);
+                                  SPolicy,ConnectedCommunicationPolicy>::type * = 0);
+#       else
+        template <class SPolicy>
+        static unsigned write(ClientSocketHandle<SPolicy> handle, char const * buffer, 
+                              unsigned size);
                                         ///< write data to socket
                                         /**< This member is only enabled if the socket uses
                                              connected communication. Otherwise the communication
@@ -105,13 +116,20 @@ namespace senf {
                                              \param[in] buffer address of buffer to send
                                              \param[in] size number of bytes to write
                                              \returns number of bytes written */
-        template <class Policy>
-        static unsigned writeto(ClientSocketHandle<Policy> handle,
+#       endif
+#       ifndef DOXYGEN
+        template <class SPolicy>
+        static unsigned writeto(ClientSocketHandle<SPolicy> handle,
                                 typename boost::call_traits<
-                                    typename Policy::AddressingPolicy::Address>::param_type addr,
+                                    typename SPolicy::AddressingPolicy::Address>::param_type addr,
                                 char const * buffer, unsigned size,
                                 typename IfCommunicationPolicyIs<
-                                    Policy,UnconnectedCommunicationPolicy>::type * = 0);
+                                    SPolicy,UnconnectedCommunicationPolicy>::type * = 0);
+#       else
+        template <class SPolicy>
+        static unsigned writeto(ClientSocketHandle<SPolicy> handle,
+                                typename Policy::AddressingPolicy::Address const & addr,
+                                char const * buffer, unsigned size);
                                         ///< write data to socket sending to given peer
                                         /**< This member is only enabled if the socket uses
                                              unconnected communication. Otherwise no target may be
@@ -120,9 +138,10 @@ namespace senf {
                                              \param[in] handle socket handle to write data to
                                              \param[in] buffer address of buffer to send
                                              \param[in] size number of bytes to write
-                                             \param[in] address peer to send data to
+                                             \param[in] addr peer to send data to
                                              \returns number of bytes written
                                           */
+#       endif
 
     private:
         static unsigned do_write(FileHandle handle, char const * buffer, unsigned size);
@@ -158,4 +177,5 @@ namespace senf {
 // indent-tabs-mode: nil
 // ispell-local-dictionary: "american"
 // compile-command: "scons -u test"
+// comment-column: 40
 // End: