#include "s_net.h"
#include <stdio.h>
#include <string.h>
#include <errno.h>
#ifndef _WIN32
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#endif
#ifdef HAVE_SYS_FILIO_H
#include <sys/filio.h>
#endif
#ifdef _WIN32
const char* INET_NTOP(int af, const void *src, char *dst, socklen_t size) {
struct sockaddr_storage addr;
socklen_t addrlen;
memset(&addr, 0, sizeof(struct sockaddr_storage));
addr.ss_family = af;
if (af == AF_INET6)
{
struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)&addr;
memcpy(&(sa6->sin6_addr.s6_addr), src, sizeof(sa6->sin6_addr.s6_addr));
addrlen = sizeof(struct sockaddr_in6);
}
else if (af == AF_INET)
{
struct sockaddr_in *sa4 = (struct sockaddr_in *)&addr;
memcpy(&(sa4->sin_addr.s_addr), src, sizeof(sa4->sin_addr.s_addr));
addrlen = sizeof(struct sockaddr_in);
}
else
return NULL;
if (WSAAddressToStringA((struct sockaddr *)&addr, addrlen, 0, dst,
(LPDWORD)&size) != 0)
return NULL;
return dst;
}
#else
#define INET_NTOP …
#endif
int addrinfo_get_list(struct addrinfo **ailist, const char *hostname,
int port, int protocol) { … }
int addrinfo_ipv4_first(const struct addrinfo* ai1, const struct addrinfo* ai2)
{ … }
int addrinfo_ipv6_first(const struct addrinfo* ai1, const struct addrinfo* ai2){ … }
void addrinfo_sort_list(struct addrinfo **ailist,
int (*compare)(const struct addrinfo*, const struct addrinfo*))
{ … }
void addrinfo_print_list(const struct addrinfo *ailist)
{ … }
const char* sockaddr_get_addrstr(const struct sockaddr *sa, char *addrstr,
int addrstrlen)
{ … }
unsigned int sockaddr_get_port(const struct sockaddr *sa)
{ … }
void sockaddr_set_port(const struct sockaddr *sa, unsigned int port) { … }
int sockaddr_is_multicast(const struct sockaddr *sa)
{ … }
int socket_init(void)
{ … }
int socket_connect(int socket, const struct sockaddr *addr,
socklen_t addrlen, float timeout)
{ … }
void socket_close(int socket)
{ … }
unsigned int socket_get_port(int socket)
{ … }
int socket_set_boolopt(int socket, int level, int option_name, int bool_value)
{ … }
int socket_set_nonblocking(int socket, int nonblocking)
{ … }
int socket_bytes_available(int socket)
{ … }
int socket_join_multicast_group(int socket, const struct sockaddr *sa)
{ … }
int socket_leave_multicast_group(int socket, const struct sockaddr *sa)
{ … }
int socket_errno(void)
{ … }
int socket_errno_udp(void)
{ … }
void socket_strerror(int err, char *buf, int size)
{ … }