1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
/*
** Copyright 1998 - 2011 Double Precision, Inc.
** See COPYING for distribution information.
*/
#include "config.h"
#include "rfc1035.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <errno.h>
/*
** Create a socket. Duh. If we've compiled IPv6 support, but we can't
** create an IPv6 socket, create an IPv4 socket. This can happen, say,
** on Linux with IPv6 runtime libraries, but without IPv6 in the kernel.
*/
int rfc1035_mksocket(int sock_type, int sock_protocol, int *af)
{
#if RFC1035_IPV6
int s;
int on=0;
*af=AF_INET6;
if ( (s=socket(PF_INET6, sock_type, sock_protocol)) >= 0)
{
#ifdef IPV6_V6ONLY
setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
(char *)&on, sizeof(on));
#endif
return (s);
}
#endif
*af=AF_INET;
return (socket(PF_INET, sock_type, sock_protocol));
}
|