-/* Maximum number of fds that we support sending or receiving at one time
- * across a Unix domain socket. */
-#define SOUTIL_MAX_FDS 8
-
-/* Iovecs. */
-size_t iovec_len(const struct iovec *iovs, size_t n_iovs);
-bool iovec_is_empty(const struct iovec *iovs, size_t n_iovs);
-
-/* Functions particularly useful for Unix domain sockets. */
-void xsocketpair(int domain, int type, int protocol, int fds[2]);
-int send_iovec_and_fds(int sock,
- const struct iovec *iovs, size_t n_iovs,
- const int fds[], size_t n_fds);
-int send_iovec_and_fds_fully(int sock,
- const struct iovec *iovs, size_t n_iovs,
- const int fds[], size_t n_fds,
- size_t skip_bytes, size_t *bytes_sent);
-int send_iovec_and_fds_fully_block(int sock,
- const struct iovec *iovs, size_t n_iovs,
- const int fds[], size_t n_fds);
-int recv_data_and_fds(int sock,
- void *data, size_t size,
- int fds[SOUTIL_MAX_FDS], size_t *n_fdsp);
+#ifndef _WIN32
+/* Helpers for calling ioctl() on an AF_INET socket. */
+struct ifreq;
+int af_inet_ioctl(unsigned long int command, const void *arg);
+int af_inet_ifreq_ioctl(const char *name, struct ifreq *,
+ unsigned long int cmd, const char *cmd_name);
+#endif
+
+/* Functions for working with sockaddr_storage that might contain an IPv4 or
+ * IPv6 address. */
+uint16_t ss_get_port(const struct sockaddr_storage *);
+#define SS_NTOP_BUFSIZE (1 + INET6_ADDRSTRLEN + 1)
+char *ss_format_address(const struct sockaddr_storage *,
+ char *buf, size_t bufsize);
+size_t ss_length(const struct sockaddr_storage *);
+const char *sock_strerror(int error);
+
+#ifdef _WIN32
+/* Windows defines the 'optval' argument as char * instead of void *. */
+#define setsockopt(sock, level, optname, optval, optlen) \
+ rpl_setsockopt(sock, level, optname, optval, optlen)
+static inline int rpl_setsockopt(int sock, int level, int optname,
+ const void *optval, socklen_t optlen)
+{
+ return (setsockopt)(sock, level, optname, optval, optlen);
+}
+
+#define getsockopt(sock, level, optname, optval, optlen) \
+ rpl_getsockopt(sock, level, optname, optval, optlen)
+static inline int rpl_getsockopt(int sock, int level, int optname,
+ void *optval, socklen_t *optlen)
+{
+ return (getsockopt)(sock, level, optname, optval, optlen);
+}
+#endif
+
+/* In Windows platform, errno is not set for socket calls.
+ * The last error has to be gotten from WSAGetLastError(). */
+static inline int sock_errno(void)
+{
+#ifdef _WIN32
+ return WSAGetLastError();
+#else
+ return errno;
+#endif
+}
+
+#ifndef _WIN32
+#define closesocket close
+#endif