Hi.

I have a function which checks if the sa_family is AF_INET or AF_INET6 and
formats the client address as IPv4 (e.g. 127.0.0.1) or IPv6 (e.g. ::1) into
a string. However, when I enable the dual stack in MHD, it always
returns AF_INET6 in sa_family even when passing -4 as parameter in curl.

I'm using MHD_get_connection_info(...,
MHD_CONNECTION_INFO_CLIENT_ADDRESS)->client_addr to get the client
address and the formatting function is in attachment below.

Is there any flag to force MHD to return AF_INET when the client connects
explicitly as IPv4?

Thank you!

// Attachment: function to format the client address as IPv4 or IPv6
int get_ip(const void *socket, char *buf, size_t size) {
  const struct sockaddr *sa;
  if (!socket || !buf || (ssize_t) size < 0)
    return EINVAL;
  sa = socket;
  switch (sa->sa_family) {
    case AF_INET:
      if (!inet_ntop(AF_INET, &(((struct sockaddr_in *) sa)->sin_addr), buf,
                     size))
        return errno;
      break;
    case AF_INET6:
      if (!inet_ntop(AF_INET6, &(((struct sockaddr_in6 *) sa)->sin6_addr),
buf,
                     size))
        return errno;
      break;
    default:
      return EINVAL;
  }
  return 0;
}

--
Silvio Clécio

Reply via email to