[haiku-commits] r38040 - haiku/trunk/src/kits/network/libnetapi

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 12 Aug 2010 13:43:20 +0200 (CEST)

Author: axeld
Date: 2010-08-12 13:43:20 +0200 (Thu, 12 Aug 2010)
New Revision: 38040
Changeset: http://dev.haiku-os.org/changeset/38040

Modified:
   haiku/trunk/src/kits/network/libnetapi/NetworkAddressResolver.cpp
Log:
* Improved error reporting.


Modified: haiku/trunk/src/kits/network/libnetapi/NetworkAddressResolver.cpp
===================================================================
--- haiku/trunk/src/kits/network/libnetapi/NetworkAddressResolver.cpp   
2010-08-12 11:27:14 UTC (rev 38039)
+++ haiku/trunk/src/kits/network/libnetapi/NetworkAddressResolver.cpp   
2010-08-12 11:43:20 UTC (rev 38040)
@@ -6,6 +6,7 @@
 
 #include <NetworkAddressResolver.h>
 
+#include <errno.h>
 #include <netdb.h>
 
 #include <NetworkAddress.h>
@@ -157,12 +158,44 @@
 
        int status = getaddrinfo(host != NULL ? hostString.String() : NULL,
                portString.Length() != 0 ? portString.String() : NULL, &hint, 
&fInfo);
-       if (status != 0) {
-               // TODO: improve error reporting
-               return fStatus = B_ERROR;
+       if (status == 0)
+               return fStatus = B_OK;
+       
+       // Map errors
+       // TODO: improve error reporting, maybe add specific error codes?
+
+       switch (status) {
+               case EAI_ADDRFAMILY:
+               case EAI_BADFLAGS:
+               case EAI_PROTOCOL:
+               case EAI_BADHINTS:
+               case EAI_SOCKTYPE:
+               case EAI_SERVICE:
+               case EAI_NONAME:
+               case EAI_FAMILY:
+                       fStatus = B_BAD_VALUE;
+                       break;
+
+               case EAI_SYSTEM:
+                       fStatus = errno;
+                       break;
+
+               case EAI_OVERFLOW:
+               case EAI_MEMORY:
+                       fStatus = B_NO_MEMORY;
+                       break;
+               
+               case EAI_AGAIN:
+                       // TODO: better error code to denote temporary failure?
+                       fStatus = B_TIMED_OUT;
+                       break;
+               
+               default:
+                       fStatus = B_ERROR;
+                       break;
        }
 
-       return fStatus = B_OK;
+       return fStatus;
 }
 
 


Other related posts:

  • » [haiku-commits] r38040 - haiku/trunk/src/kits/network/libnetapi - axeld