Changeset 3860

Show
Ignore:
Timestamp:
03/02/06 19:10:37 (3 years ago)
Author:
morris
Message:

Also return an address with the IPv6 wildcard on Linux

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libwired/trunk/libwired/net/wi-host.c

    r3811 r3860  
    197197static wi_list_t * _wi_host_all_interface_addresses(void) { 
    198198#if defined(HAVE_GETIFADDRS) && !defined(HAVE_GLIBC) 
    199         wi_list_t                       *list = NULL
     199        wi_list_t                       *list
    200200        wi_address_t            *address; 
    201201        struct ifaddrs          *ifap, *ifp; 
     
    232232        return wi_autorelease(list); 
    233233#else 
    234         wi_list_t                       *list; 
    235         wi_address_t            *address; 
    236         struct sockaddr_in      sa; 
     234        wi_list_t                               *list; 
     235        wi_address_t                    *address; 
     236        struct sockaddr_in              sa; 
     237        struct sockaddr_in6             sa6; 
     238 
     239        list = wi_list_init(wi_list_alloc()); 
    237240 
    238241        memset(&sa, 0, sizeof(sa)); 
    239242        sa.sin_family           = AF_INET; 
    240243        sa.sin_addr.s_addr      = INADDR_ANY; 
     244#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN 
     245        sa.sin_len                      = sizeof(sa); 
     246#endif 
    241247 
    242248        address = wi_address_init_with_sa(wi_address_alloc(), (struct sockaddr *) &sa); 
    243         list = wi_list_init_with_data(wi_list_alloc(), address, NULL); 
     249        wi_list_append_data(list, address); 
    244250        wi_release(address); 
    245251         
     252        memset(&sa6, 0, sizeof(sa6)); 
     253        sa6.sin6_family         = AF_INET6; 
     254        sa6.sin6_addr           = in6addr_any; 
     255#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN 
     256        sa6.sin6_len            = sizeof(sa6); 
     257#endif 
     258         
     259        address = wi_address_init_with_sa(wi_address_alloc(), (struct sockaddr *) &sa6); 
     260        wi_list_append_data(list, address); 
     261        wi_release(address); 
     262 
    246263        return wi_autorelease(list); 
    247264#endif