15#include <netinet/ip6.h>
16#include <sys/socket.h>
157 w::fd accept(
int sockfd,
struct sockaddr *addr, socklen_t *addrlen);
169 template <
typename Address>
172 socklen_t addrlen =
sizeof(addr);
173 w::fd fd =
w::accept(sockfd,
reinterpret_cast<struct sockaddr *
>(&addr), &addrlen);
175 if (addrlen !=
sizeof(addr))
177 "provided structure is not the correct size to hold receive connect address");
190 void bind(
int sockfd,
const struct sockaddr *addr, socklen_t addrlen);
200 template <
typename Address>
201 void bind(
int sockfd,
const Address& addr)
203 w::bind(sockfd,
reinterpret_cast<const struct sockaddr *
>(&addr),
sizeof(addr));
214 void connect(
int sockfd,
const struct sockaddr *addr, socklen_t addrlen);
224 template <
typename Address>
227 w::connect(sockfd,
reinterpret_cast<const struct sockaddr *
>(&addr),
sizeof(addr));
251 int getsockopt(
int sockfd,
int level,
int optname,
252 void *optval =
nullptr, socklen_t *optlen =
nullptr);
264 template <
typename Value>
268 socklen_t optlen =
sizeof(optval);
270 if (optlen !=
sizeof(optval))
272 "wrong size value expected for socket option");
295 char *
inet_ntop(
int af,
const void *src,
char *dst, socklen_t size);
306 void *
inet_pton(
int af,
const char *src,
void *dst);
317 template <
typename Address>
318 Address&
inet_pton(
int af,
const char *src, Address& dst)
331 void listen(
int sockfd,
int backlog);
373 struct sockaddr *src_addr =
nullptr, socklen_t *addrlen =
nullptr);
389 template <
typename Address>
392 socklen_t addrlen =
sizeof(src_addr);
394 reinterpret_cast<struct sockaddr *
>(&src_addr), &addrlen);
396 if (addrlen !=
sizeof(src_addr))
398 "provided structure is not the correct size to hold receive source address");
439 int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
453 template <
typename Address>
455 int flags,
const Address& dest_addr)
457 return w::sendto(sockfd, buf, len, flags,
458 reinterpret_cast<const struct sockaddr *
>(&dest_addr),
sizeof(dest_addr));
472 int setsockopt(
int sockfd,
int level,
int optname,
473 const void *optval =
nullptr, socklen_t optlen = 0);
485 template <
typename Value>
486 void setsockopt(
int sockfd,
int level,
int optname,
const Value& optval)
488 w::setsockopt(sockfd, level, optname, &optval,
sizeof(optval));
509 w::fd socket(
int domain,
int type,
int protocol = 0);
514 inline const struct ifaddrs *get_next_ifaddrs(
const struct ifaddrs *cur)
516 return cur->ifa_next;
526inline auto begin(
const struct ifaddrs *ptr)
noexcept
537inline auto end(
const struct ifaddrs *ptr)
noexcept
549inline bool operator==(
const in6_addr& a,
const in6_addr& b)
noexcept
561inline bool operator!=(
const in6_addr& a,
const in6_addr& b)
noexcept
573inline bool operator<(
const in6_addr& a,
const in6_addr& b)
noexcept
An RAII handle type which owns an opaque resource of a specified type, and calls a designated functio...
Definition: handle.hpp:40
Definition: assert.hpp:13
void bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
Binds a socket to an address.
Definition: sockets.cpp:113
std::size_t recv(int sockfd, void *buf, std::size_t len, int flags=0)
Receives a message from a socket.
Definition: sockets.cpp:190
w::handle< int, -1, ::close > fd
An RAII util::handle type for POSIX file descriptors.
Definition: posix.hpp:25
w::handle< struct ifaddrs *, nullptr, ::freeifaddrs > getifaddrs()
Gets a pointer to the head of a linked list of the system's network interfaces.
Definition: sockets.cpp:129
int setsockopt(int sockfd, int level, int optname, const void *optval=nullptr, socklen_t optlen=0)
Sets an option on a socket.
Definition: sockets.cpp:246
void listen(int sockfd, int backlog)
Puts a socket in a listening state.
Definition: sockets.cpp:182
std::size_t sendmsg(int sockfd, const struct msghdr *msg, int flags=0)
Sends a message on a socket.
Definition: sockets.cpp:227
unsigned if_nametoindex(const char *ifname)
Returns the index of the specified network interface.
Definition: sockets.cpp:149
std::size_t send(int sockfd, const void *buf, std::size_t len, int flags=0)
Sends a message on a socket.
Definition: sockets.cpp:218
w::fd socket(int domain, int type, int protocol=0)
Creates a socket.
Definition: sockets.cpp:263
std::size_t recvfrom(int sockfd, void *buf, std::size_t len, int flags, struct sockaddr *src_addr=nullptr, socklen_t *addrlen=nullptr)
Receives a message from a socket.
Definition: sockets.cpp:208
void * inet_pton(int af, const char *src, void *dst)
Converts an IPv4 or IPv6 address from a string to a binary value.
Definition: sockets.cpp:167
void shutdown(int sockfd, int how)
Shuts down part of a full-duplex connection.
Definition: sockets.cpp:255
std::size_t recvmsg(int sockfd, struct msghdr *msg, int flags=0)
Receives a message from a socket.
Definition: sockets.cpp:199
char * inet_ntop(int af, const void *src, char *dst, socklen_t size)
Converts an IPv4 or IPv6 address to a string.
Definition: sockets.cpp:157
int getsockopt(int sockfd, int level, int optname, void *optval=nullptr, socklen_t *optlen=nullptr)
Gets an option on a socket.
Definition: sockets.cpp:140
void connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
Connects a socket.
Definition: sockets.cpp:121
std::size_t sendto(int sockfd, const void *buf, std::size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
Sends a message on a socket.
Definition: sockets.cpp:236
w::fd accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
Accepts a connection on a socket.
Definition: sockets.cpp:105
auto end(const struct ifaddrs *ptr) noexcept
Returns an input iterator pointing to the end of a struct ifaddrs array.
Definition: sockets.hpp:537
auto begin(const struct ifaddrs *ptr) noexcept
Returns an input iterator pointing to the struct ifaddrs entry ptr.
Definition: sockets.hpp:526
bool operator==(const in6_addr &a, const in6_addr &b) noexcept
Compares two IPv6 addresses.
Definition: sockets.hpp:549
bool operator!=(const in6_addr &a, const in6_addr &b) noexcept
Compares two IPv6 addresses.
Definition: sockets.hpp:561
bool operator<(const in6_addr &a, const in6_addr &b) noexcept
Compares two IPv6 addresses.
Definition: sockets.hpp:573
A forward iterator for linked lists.
Definition: iterators.hpp:22
Wraps struct sockaddr_in, adding constructors for convenient initialization.
Definition: sockets.hpp:30
Wraps struct sockaddr_in6, adding constructors for convenient initialization.
Definition: sockets.hpp:62
Wraps struct sockaddr_in, adding constructors for convenient initialization.
Definition: sockets.hpp:136