diff options
| author | Sam Varshavchik | 2013-08-19 16:39:41 -0400 |
|---|---|---|
| committer | Sam Varshavchik | 2013-08-25 14:43:51 -0400 |
| commit | 9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch) | |
| tree | 7a81a04cb51efb078ee350859a64be2ebc6b8813 /rfc1035/rfc1035mksocket.c | |
| parent | a9520698b770168d1f33d6301463bb70a19655ec (diff) | |
| download | courier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2 | |
Initial checkin
Imported from subversion report, converted to git. Updated all paths in
scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'rfc1035/rfc1035mksocket.c')
| -rw-r--r-- | rfc1035/rfc1035mksocket.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/rfc1035/rfc1035mksocket.c b/rfc1035/rfc1035mksocket.c new file mode 100644 index 0000000..45bb66a --- /dev/null +++ b/rfc1035/rfc1035mksocket.c @@ -0,0 +1,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)); +} |
