Brian "Krow" Aker (krow) wrote,
Brian "Krow" Aker
krow

Solaris, IPV6, getnameinfo() completely busted?

Dear LazyWeb,

No matter how I modify this following code it does not work with Solaris. Solaris always returns "non-recoverable name resolution failure":

     int error;
     char port_buf[NI_MAXSERV];
     size_socket addrLen = sizeof(vio->remote);
     if (getpeername(vio->sd, (struct sockaddr *) (&vio->remote),
                     &addrLen) != 0)
     {
       DBUG_PRINT("exit", ("getpeername gave error: %d", socket_errno));
       DBUG_RETURN(1);
     }

     if ((error= getnameinfo((struct sockaddr *)(&vio->remote),
                             sizeof(struct sockaddr_storage),
                             buf, buflen,
                             port_buf, NI_MAXSERV, NI_NUMERICHOST|NI_NUMERICSERV)))
     {
       WATCHPOINT_STRING(gai_strerror(error));
       DBUG_PRINT("exit", ("getnameinfo gave error: %s",
                           gai_strerror(error)));
       DBUG_RETURN(1);
     }




Linux, FreeBSD, OSX, AIX, Windows.... all are fine. Except Solaris. For DNS resolution nsswitch.conf lists files, then DNS.

I am completely capable of FUBAR code myself. So some part of me really does believe this is my mistake. When I google for "non-recoverable name resolution failure" and Solaris I get plenty of hits though, so I am skeptical.

Very few open source projects have good IPv6 support at this time, so it is not like I can just poke around and other groups code and see how they are doing it (though I am tempted to fire off some patches...).

(...and yes this is MySQL, and if I have to all platforms but Solaris get IPv6 support, I have a very low tolerance for work arounds on broken operating systems).
Subscribe
  • Post a new comment

    Error

    Comments allowed for friends only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 18 comments