removed some useless spaces; not very important, I know :)
[senf.git] / Socket / ReadWritePolicy.cc
index b1f280c..6be00b6 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>
+// Copyright (C) 2006
+// 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
@@ -53,7 +53,7 @@ prefix_ unsigned senf::ReadablePolicy::read(FileHandle handle, char * buffer,
                 rv = 0;
                 break;
             default:
-                throw SystemException(errno);
+                throwErrno();
             }
     } while (rv<0);
     return rv;
@@ -74,7 +74,7 @@ prefix_ unsigned senf::ReadablePolicy::do_readfrom(FileHandle handle, char * buf
                 rv = 0;
                 break;
             default:
-                throw SystemException(errno);
+                throwErrno();
             }
     } while (rv<0);
     return rv;
@@ -91,10 +91,16 @@ prefix_ unsigned senf::WriteablePolicy::do_write(FileHandle handle, char const *
             case EINTR:
                 break;
             case EAGAIN:
+            case ECONNREFUSED:
+                // Writing to a UDP socket seems return this error code if a corresponding ICMP
+                // error code has been received before (at least on linux). This is inconsistent
+                // since I cannot rely on getting ECONNREFUSED. I therefore ignore this error. TCP
+                // sockets will return this error on connect() and not on write(). Therefore we can
+                // unconditionally ignore this error here.
                 rv = 0;
                 break;
             default:
-                throw SystemException(errno);
+                throwErrno();
             }
     } while (rv<0);
     return rv;
@@ -102,7 +108,7 @@ prefix_ unsigned senf::WriteablePolicy::do_write(FileHandle handle, char const *
 
 prefix_ unsigned senf::WriteablePolicy::do_writeto(FileHandle handle,
                                                           char const * buffer, unsigned size,
-                                                          struct sockaddr * addr, socklen_t len)
+                                                          struct sockaddr const * addr, socklen_t len)
 {
     int rv = -1;
     do {
@@ -115,12 +121,12 @@ prefix_ unsigned senf::WriteablePolicy::do_writeto(FileHandle handle,
                 rv = 0;
                 break;
             default:
-                throw SystemException(errno);
+                throwErrno();
             }
     } while (rv<0);
     return rv;
 }
-    
+
 ///////////////////////////////cc.e////////////////////////////////////////
 #undef prefix_
 //#include "ReadWritePolicy.mpp"
@@ -128,5 +134,10 @@ prefix_ unsigned senf::WriteablePolicy::do_writeto(FileHandle handle,
 \f
 // Local Variables:
 // mode: c++
+// fill-column: 100
 // c-file-style: "senf"
+// indent-tabs-mode: nil
+// ispell-local-dictionary: "american"
+// compile-command: "scons -u test"
+// comment-column: 40
 // End: