#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "socket.h"

int 
socket_family(int fd)
{
  struct sockaddr_in sa4;
  int dummy;
#ifdef HAVE_IPV6
  struct sockaddr_in6 sa6;
  dummy = sizeof sa6;
  if (-1!=getsockname(fd,(struct sockaddr *) &sa6,&dummy)) {
    if (sa6.sin6_family==AF_INET6)
      return 6;
    if (sa6.sin6_family==AF_INET) /* can this happen? */
      return 4;
    return -1;
  }
#endif
  dummy = sizeof sa4;
  if (-1==getsockname(fd,(struct sockaddr *) &sa4,&dummy))
    return -1;
#ifdef AF_INET6
  if (sa4.sin_family==AF_INET6) /* however? */
    return 6;
#endif
  if (sa4.sin_family==AF_INET)
    return 4;
  return -1; /* whatever */
}


syntax highlighted by Code2HTML, v. 0.9.1