Changeset 5184:ad300180eb6f in roaraudio


Ignore:
Timestamp:
10/22/11 18:21:47 (12 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

updated error handling

Location:
libroar
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libroar/error.c

    r5183 r5184  
    920920  {ROAR_ERROR_NONE,        "No error"}, 
    921921  {ROAR_ERROR_PERM,        "Operation not permitted"}, 
    922   {ROAR_ERROR_NOENT,       "No such object, file or directory"}, 
     922  {ROAR_ERROR_NOENT,       "No such object, file, directory or node"}, 
    923923  {ROAR_ERROR_BADMSG,      "Bad message"}, 
    924924  {ROAR_ERROR_BUSY,        "Device or resource busy"}, 
  • libroar/socket.c

    r5148 r5184  
    498498#ifdef ROAR_HAVE_IPX 
    499499#define _NEED_OBJ 
     500#endif 
     501#if defined(ROAR_HAVE_IPX) || defined(ROAR_HAVE_GETADDRINFO) 
    500502 int ret; 
    501503#endif 
     
    551553 
    552554 ROAR_DBG("roar_socket_open(mode=%i, type=%i, host='%s', port=%i) = ?", mode, type, host, port); 
     555 
     556 roar_err_set(ROAR_ERROR_UNKNOWN); 
    553557 
    554558 if ( mode == MODE_LISTEN ) 
     
    588592   if ( del == NULL ) { 
    589593    ROAR_WARN("roar_socket_open(*): invalid hostname for DECnet: %s", host); 
     594    roar_err_set(ROAR_ERROR_INVAL); 
    590595    return -1; 
    591596   } 
     
    610615   *del = ':'; 
    611616   return fh; 
    612 //   return -1; // listen sockets on DECnet are not supportet at the moment 
    613617  } else { 
    614618   // There is nothing wrong in this case to use dnet_conn() so we do. 
     
    620624  } 
    621625#else 
     626  roar_err_set(ROAR_ERROR_AFNOTSUP); 
    622627  return -1; // no decnet support 
    623628#endif 
     
    660665  snprintf(port_as_string, sizeof(port_as_string), "%i", port); 
    661666 
    662   if ( getaddrinfo(host, port_as_string, &hints, &res) != 0 ) 
     667  ret = getaddrinfo(host, port_as_string, &hints, &res); 
     668  switch (ret) { 
     669   case 0: /* no error */; break; 
     670   case EAI_ADDRFAMILY: roar_err_set(ROAR_ERROR_NOENT);    break; 
     671   case EAI_AGAIN:      roar_err_set(ROAR_ERROR_AGAIN);    break; 
     672   case EAI_BADFLAGS:   roar_err_set(ROAR_ERROR_INVAL);    break; 
     673   case EAI_FAIL:       roar_err_set(ROAR_ERROR_RIO);      break; 
     674   case EAI_FAMILY:     roar_err_set(ROAR_ERROR_AFNOTSUP); break; 
     675   case EAI_MEMORY:     roar_err_set(ROAR_ERROR_NOMEM);    break; 
     676   case EAI_NODATA:     roar_err_set(ROAR_ERROR_NODATA);   break; 
     677   case EAI_NONAME:     roar_err_set(ROAR_ERROR_NOENT);    break; 
     678   case EAI_SERVICE:    roar_err_set(ROAR_ERROR_PROTONOSUP); break; 
     679   case EAI_SOCKTYPE:   roar_err_set(ROAR_ERROR_INVAL);    break; 
     680   case EAI_SYSTEM:     roar_err_from_errno();             break; 
     681   default: 
     682     roar_err_set(ROAR_ERROR_UNKNOWN); 
     683    break; 
     684  } 
     685  if ( ret != 0 ) 
    663686   return -1; 
    664687 
     
    682705   ROAR_ERR("roar_socket_open(*): Can\'t resolve host name '%s'", 
    683706                     host); 
     707   roar_err_from_errno(); 
    684708   return -1; 
    685709  } 
     
    710734   if ( mode_func(fh, (struct sockaddr *)&socket_addr.sa, addrlen) == -1 ) { 
    711735    ROAR_DBG("roar_socket_open(*): Can not connect/bind: %s", strerror(errno)); 
     736    roar_err_from_errno(); 
    712737    close(fh); 
    713738    return -1; 
     
    720745#else 
    721746  ROAR_DBG("roar_socket_open(*) = -1 // no IPv4 or IPv6 support"); 
     747  roar_err_set(ROAR_ERROR_AFNOTSUP); 
    722748  return -1; 
    723749#endif 
     
    737763  if ( mode_func(fh, (struct sockaddr *)&socket_addr.un, sizeof(struct sockaddr_un)) == -1 ) { 
    738764   ROAR_DBG("roar_socket_open(*): Can not connect/bind: %s", strerror(errno)); 
     765   roar_err_from_errno(); 
    739766   close(fh); 
    740767   return -1; 
     
    742769#else 
    743770  ROAR_ERR("roar_socket_open(*): There is no UNIX Domain Socket support in win32, download a real OS."); 
     771  roar_err_set(ROAR_ERROR_AFNOTSUP); 
    744772  return -1; 
    745773#endif 
     
    766794 
    767795  close(fh); 
    768   return -1; 
    769 #else 
     796  roar_err_set(ROAR_ERROR_NOSYS); 
     797  return -1; 
     798#else 
     799  roar_err_set(ROAR_ERROR_AFNOTSUP); 
    770800  return -1; 
    771801#endif 
     
    775805  return roar_socket_open_file(mode, host, port); 
    776806 } else { 
     807  roar_err_set(ROAR_ERROR_AFNOTSUP); 
    777808  return -1; 
    778809 } 
     
    781812#if defined(ROAR_HAVE_BSDSOCKETS) || defined(ROAR_TARGET_WIN32) 
    782813  if ( listen(fh, ROAR_SOCKET_QUEUE_LEN) == -1 ) { 
     814   roar_err_from_errno(); 
    783815   close(fh); 
    784816   return -1; 
    785817  } 
    786818#else 
     819  roar_err_set(ROAR_ERROR_NOSYS); 
    787820  return -1; 
    788821#endif 
Note: See TracChangeset for help on using the changeset viewer.