Changeset 313 for trunk/src/sh_tools.c


Ignore:
Timestamp:
Mar 11, 2011, 8:04:49 PM (14 years ago)
Author:
katerina
Message:

Fix for ticker #234 (spurious warnings about unsupported address family)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_tools.c

    r295 r313  
    574574        {
    575575          if ( 0 == sl_strncmp(check_cache->address,
    576                                address, sl_strlen(address)))
     576                               address, sl_strlen(address)) )
    577577            {
    578578              memcpy (&sinr, &((check_cache->saddr).sin), sizeof(struct sockaddr_in));
     
    778778      while (check_cache && check_cache->address)
    779779        {
    780           if ( 0 == sl_strncmp(check_cache->address,
    781                                address, sl_strlen(address)))
     780          if ( 0 == sl_strcmp(check_cache->address, address) )
    782781            {
    783782              memcpy (&ss, &(check_cache->saddr), sizeof(struct sh_sockaddr));
     
    787786                  sin = &(ss.sin);
    788787                  sin->sin_port   = htons (port);
     788                  cached = 1;
     789                  break;
    789790                case AF_INET6:
    790791                  sin6 = &(ss.sin6);
    791792                  sin6->sin6_port  = htons (port);
     793                  cached = 1;
     794                  break;
     795                default:
     796                  break;
    792797                }
    793               cached = 1;
    794798              break;
    795799            }
     
    814818          sl_strlcat(errmsg, address, errsiz);
    815819        }
    816    
    817  
     820
     821
    818822      if (fail != (-1))
    819823        {
     
    853857      hints.ai_flags |= AI_CANONNAME;
    854858#endif
     859      hints.ai_family   = AF_UNSPEC;
    855860      hints.ai_socktype = SOCK_STREAM;
    856861      sl_snprintf(sport, sizeof(sport), "%d", port);
     
    923928          while (p != NULL)
    924929            {
    925               fd = socket(p->ai_family, p->ai_socktype,
    926                           p->ai_protocol);
    927 
    928               if (fd != (-1))
     930              if ( (SOCK_STREAM == p->ai_socktype) &&
     931                   ((p->ai_family == AF_INET) || (p->ai_family == AF_INET6)) )
    929932                {
    930                   if (retry_connect(FIL__, __LINE__, fd,
    931                                     p->ai_addr, p->ai_addrlen) >= 0)
     933               
     934                  fd = socket(p->ai_family, SOCK_STREAM, 0);
     935                 
     936                  if (fd != (-1))
    932937                    {
    933                       /* put it into the cache
    934                        */
    935                       check_cache          = SH_ALLOC(sizeof(sin_cache));
    936                       check_cache->address = SH_ALLOC(sl_strlen(address) + 1);
    937                       sl_strlcpy (check_cache->address, address, sl_strlen(address) + 1);
    938 
    939                       sh_ipvx_save(&(check_cache->saddr), p->ai_family, p->ai_addr);
    940 
    941                       ++cached_addr;
    942          
    943                       if (conn_cache)
     938                      if (retry_connect(FIL__, __LINE__, fd,
     939                                        p->ai_addr, p->ai_addrlen) >= 0)
    944940                        {
    945                           if (conn_cache->next)
    946                             check_cache->next    = conn_cache->next;
     941                          /* put it into the cache
     942                           */
     943                          check_cache          = SH_ALLOC(sizeof(sin_cache));
     944                          check_cache->address = SH_ALLOC(sl_strlen(address) + 1);
     945                          sl_strlcpy (check_cache->address, address, sl_strlen(address) + 1);
     946                         
     947                          sh_ipvx_save(&(check_cache->saddr), p->ai_family, p->ai_addr);
     948                         
     949                          ++cached_addr;
     950                         
     951                          if (conn_cache)
     952                            {
     953                              if (conn_cache->next)
     954                                check_cache->next    = conn_cache->next;
     955                              else
     956                                check_cache->next    = NULL;
     957                              conn_cache->next     = check_cache;
     958                            }
    947959                          else
    948                             check_cache->next    = NULL;
    949                           conn_cache->next     = check_cache;
     960                            {
     961                              check_cache->next    = NULL;
     962                              conn_cache           = check_cache;
     963                            }
     964                         
     965                          freeaddrinfo (ai);
     966                          goto end;
    950967                        }
    951                       else
    952                         {
    953                           check_cache->next    = NULL;
    954                           conn_cache           = check_cache;
    955                         }
    956                    
    957                       freeaddrinfo (ai);
    958                       goto end;
     968                      status = errno;
     969                      sl_close_fd(FIL__, __LINE__, fd);
    959970                    }
    960                   status = errno;
    961                   sl_close_fd(FIL__, __LINE__, fd);
    962                 }
    963               else
    964                 {
    965                   status = errno;
     971                  else
     972                    {
     973                      status = errno;
     974                    }
    966975                }
    967976              p = p->ai_next;
Note: See TracChangeset for help on using the changeset viewer.