*succeeded = true;
}
ia = ((struct sockaddr_in *)ai->ai_addr)->sin_addr;
- freeaddrinfo(ai);
+ platform_freeaddrinfo(ai);
return (flags & GETADDR_HOST_ORDER) ? ntohl(ia.s_addr) : ia.s_addr;
}
else
struct gc_arena gc = gc_new();
const char *print_hostname;
const char *print_servname;
-
ASSERT(res);
ASSERT(hostname || servname);
hints.ai_socktype = SOCK_STREAM;
}
- status = getaddrinfo(hostname, servname, &hints, res);
+ status = platform_getaddrinfo(hostname, servname, &hints, res);
if (status != 0) /* parse as numeric address failed? */
{
hints.ai_flags &= ~AI_NUMERICHOST;
dmsg(D_SOCKET_DEBUG, "GETADDRINFO flags=0x%04x ai_family=%d ai_socktype=%d",
flags, hints.ai_family, hints.ai_socktype);
- status = getaddrinfo(hostname, servname, &hints, res);
+ status = platform_getaddrinfo(hostname, servname, &hints, res);
if (signal_received)
{
if (0 == status)
{
ASSERT(res);
- freeaddrinfo(*res);
+ platform_freeaddrinfo(*res);
*res = NULL;
status = EAI_AGAIN; /* = temporary failure */
errno = EINTR;
socklen_t len;
len = sizeof(val);
- if (getsockopt(sd, SOL_SOCKET, SO_SNDBUF, (void *) &val, &len) == 0
+ if (platform_getsockopt(sd, SOL_SOCKET, SO_SNDBUF, (void *) &val, &len) == 0
&& len == sizeof(val))
{
return val;
socket_set_sndbuf(int sd, int size)
{
#if defined(HAVE_SETSOCKOPT) && defined(SOL_SOCKET) && defined(SO_SNDBUF)
- if (setsockopt(sd, SOL_SOCKET, SO_SNDBUF, (void *) &size, sizeof(size)) != 0)
+ if (platform_setsockopt(sd, SOL_SOCKET, SO_SNDBUF, (void *) &size, sizeof(size)) != 0)
{
msg(M_WARN, "NOTE: setsockopt SO_SNDBUF=%d failed", size);
}
socklen_t len;
len = sizeof(val);
- if (getsockopt(sd, SOL_SOCKET, SO_RCVBUF, (void *) &val, &len) == 0
+ if (platform_getsockopt(sd, SOL_SOCKET, SO_RCVBUF, (void *) &val, &len) == 0
&& len == sizeof(val))
{
return val;
socket_set_rcvbuf(int sd, int size)
{
#if defined(HAVE_SETSOCKOPT) && defined(SOL_SOCKET) && defined(SO_RCVBUF)
- if (setsockopt(sd, SOL_SOCKET, SO_RCVBUF, (void *) &size, sizeof(size)) != 0)
+ if (platform_setsockopt(sd, SOL_SOCKET, SO_RCVBUF, (void *) &size, sizeof(size)) != 0)
{
msg(M_WARN, "NOTE: setsockopt SO_RCVBUF=%d failed", size);
return false;
socket_set_tcp_nodelay(int sd, int state)
{
#if defined(_WIN32) || (defined(HAVE_SETSOCKOPT) && defined(IPPROTO_TCP) && defined(TCP_NODELAY))
- if (setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (void *) &state, sizeof(state)) != 0)
+ if (platform_setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (void *) &state, sizeof(state)) != 0)
{
msg(M_WARN, "NOTE: setsockopt TCP_NODELAY=%d failed", state);
return false;
socket_set_mark(int sd, int mark)
{
#if defined(TARGET_LINUX) && HAVE_DECL_SO_MARK
- if (mark && setsockopt(sd, SOL_SOCKET, SO_MARK, (void *) &mark, sizeof(mark)) != 0)
+ if (mark && platform_setsockopt(sd, SOL_SOCKET, SO_MARK, (void *) &mark, sizeof(mark)) != 0)
{
msg(M_WARN, "NOTE: setsockopt SO_MARK=%d failed", mark);
}
ASSERT(addrinfo);
ASSERT(addrinfo->ai_socktype == SOCK_STREAM);
- if ((sd = socket(addrinfo->ai_family, addrinfo->ai_socktype, addrinfo->ai_protocol)) < 0)
+ if ((sd = platform_socket(addrinfo->ai_family, addrinfo->ai_socktype, addrinfo->ai_protocol)) < 0)
{
msg(M_ERR, "Cannot create TCP socket");
}
/* set SO_REUSEADDR on socket */
{
int on = 1;
- if (setsockopt(sd, SOL_SOCKET, SO_REUSEADDR,
+ if (platform_setsockopt(sd, SOL_SOCKET, SO_REUSEADDR,
(void *) &on, sizeof(on)) < 0)
{
msg(M_ERR, "TCP: Cannot setsockopt SO_REUSEADDR on TCP socket");
ASSERT(addrinfo);
ASSERT(addrinfo->ai_socktype == SOCK_DGRAM);
- if ((sd = socket(addrinfo->ai_family, addrinfo->ai_socktype, addrinfo->ai_protocol)) < 0)
+ if ((sd = platform_socket(addrinfo->ai_family, addrinfo->ai_socktype, addrinfo->ai_protocol)) < 0)
{
msg(M_ERR, "UDP: Cannot create UDP/UDP6 socket");
}
if (addrinfo->ai_family == AF_INET)
{
#if defined(HAVE_IN_PKTINFO) && defined(HAVE_IPI_SPEC_DST)
- if (setsockopt(sd, SOL_IP, IP_PKTINFO,
+ if (platform_setsockopt(sd, SOL_IP, IP_PKTINFO,
(void *)&pad, sizeof(pad)) < 0)
{
msg(M_ERR, "UDP: failed setsockopt for IP_PKTINFO");
}
#elif defined(IP_RECVDSTADDR)
- if (setsockopt(sd, IPPROTO_IP, IP_RECVDSTADDR,
+ if (platform_setsockopt(sd, IPPROTO_IP, IP_RECVDSTADDR,
(void *)&pad, sizeof(pad)) < 0)
{
msg(M_ERR, "UDP: failed setsockopt for IP_RECVDSTADDR");
else if (addrinfo->ai_family == AF_INET6)
{
#ifndef IPV6_RECVPKTINFO /* Some older Darwin platforms require this */
- if (setsockopt(sd, IPPROTO_IPV6, IPV6_PKTINFO,
+ if (platform_setsockopt(sd, IPPROTO_IPV6, IPV6_PKTINFO,
(void *)&pad, sizeof(pad)) < 0)
#else
- if (setsockopt(sd, IPPROTO_IPV6, IPV6_RECVPKTINFO,
+ if (platform_setsockopt(sd, IPPROTO_IPV6, IPV6_RECVPKTINFO,
(void *)&pad, sizeof(pad)) < 0)
#endif
{ msg(M_ERR, "UDP: failed setsockopt for IPV6_RECVPKTINFO");}
tv.tv_sec = 0;
tv.tv_usec = 0;
- status = select(sd + 1, &reads, NULL, NULL, &tv);
+ status = platform_select(sd + 1, &reads, NULL, NULL, &tv);
get_signal(signal_received);
if (*signal_received)
{
msg(M_ERR, "TCP: close socket failed (new_sd)");
}
- freeaddrinfo(ai);
+ platform_freeaddrinfo(ai);
}
else
{
if (ai)
{
- freeaddrinfo(ai);
+ platform_freeaddrinfo(ai);
}
break;
}
int v6only = ipv6only ? 1 : 0; /* setsockopt must have an "int" */
msg(M_INFO, "setsockopt(IPV6_V6ONLY=%d)", v6only);
- if (setsockopt(sd, IPPROTO_IPV6, IPV6_V6ONLY, (void *) &v6only, sizeof(v6only)))
+ if (platform_setsockopt(sd, IPPROTO_IPV6, IPV6_V6ONLY, (void *) &v6only, sizeof(v6only)))
{
msg(M_NONFATAL|M_ERRNO, "Setting IPV6_V6ONLY=%d failed", v6only);
}
tv.tv_sec = 0;
tv.tv_usec = 0;
- status = select(sd + 1, NULL, &writes, NULL, &tv);
+ status = platform_select(sd + 1, NULL, &writes, NULL, &tv);
#endif
+
if (signal_received)
{
get_signal(signal_received);
socklen_t len;
len = sizeof(val);
- if (getsockopt(sd, SOL_SOCKET, SO_ERROR, (void *) &val, &len) == 0
+ if (platform_getsockopt(sd, SOL_SOCKET, SO_ERROR, (void *) &val, &len) == 0
&& len == sizeof(val))
{
status = val;
/* inetd: hint family type for dest = local's */
struct openvpn_sockaddr local_addr;
socklen_t addrlen = sizeof(local_addr);
- if (getsockname(sock->sd, &local_addr.addr.sa, &addrlen) == 0)
+ if (platform_getsockname(sock->sd, &local_addr.addr.sa, &addrlen) == 0)
{
sock->info.lsa->actual.dest.addr.sa.sa_family = local_addr.addr.sa.sa_family;
dmsg(D_SOCKET_DEBUG, "inetd(%s): using sa_family=%d from getsockname(%d)",
addr_zero_host(&sock->info.lsa->actual.dest);
if (sock->info.lsa->remote_list)
{
- freeaddrinfo(sock->info.lsa->remote_list);
+ platform_freeaddrinfo(sock->info.lsa->remote_list);
sock->info.lsa->current_remote = NULL;
sock->info.lsa->remote_list = NULL;
}
const unsigned int flags,
struct gc_arena *gc)
{
+ return "[NULL]";
if (act)
{
char ifname[IF_NAMESIZE] = "[undef]";
#else
struct buffer frag;
stream_buf_get_next(&sock->stream_buf, &frag);
- len = recv(sock->sd, BPTR(&frag), BLEN(&frag), MSG_NOSIGNAL);
+ len = platform_recv(sock->sd, BPTR(&frag), BLEN(&frag), MSG_NOSIGNAL);
#endif
if (!len)
mesg.msg_namelen = fromlen;
mesg.msg_control = pktinfo_buf;
mesg.msg_controllen = sizeof pktinfo_buf;
- buf->len = recvmsg(sock->sd, &mesg, 0);
+ buf->len = platform_recvmsg(sock->sd, &mesg, 0);
if (buf->len >= 0)
{
struct cmsghdr *cmsg;
}
else
#endif
- buf->len = recvfrom(sock->sd, BPTR(buf), buf_forward_capacity(buf), 0,
+ buf->len = platform_recvfrom(sock->sd, BPTR(buf), buf_forward_capacity(buf), 0,
&from->dest.addr.sa, &fromlen);
/* FIXME: won't do anything when sock->info.af == AF_UNSPEC */
if (buf->len >= 0 && expectedlen && fromlen != expectedlen)
default: ASSERT(0);
}
- return sendmsg(sock->sd, &mesg, 0);
+ return platform_sendmsg(sock->sd, &mesg, 0);
}
#endif /* if ENABLE_IP_PKTINFO */
{
socket_descriptor_t sd;
- if ((sd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
+ if ((sd = platform_socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
{
msg(M_ERR, "Cannot create unix domain socket");
}
#elif defined(SO_PEERCRED)
struct ucred peercred;
socklen_t so_len = sizeof(peercred);
- if (getsockopt(sd, SOL_SOCKET, SO_PEERCRED, &peercred, &so_len) == -1)
+ if (platform_getsockopt(sd, SOL_SOCKET, SO_PEERCRED, &peercred, &so_len) == -1)
{
return false;
}