16#include <sys/socket.h>
18#define ARCH_NETWORK ArchNetworkBSD
19#define TYPED_ADDR(type_, addr_) (reinterpret_cast<type_ *>(&addr_->m_addr))
54 virtual void sleep(
double);
55 virtual int poll(
struct pollfd *, nfds_t,
int);
56 virtual std::shared_ptr<struct pollfd[]>
makePollFD(nfds_t);
57 virtual ssize_t
read(
int,
void *,
size_t);
61 explicit ArchNetworkBSD(std::shared_ptr<Deps> deps = std::make_shared<Deps>()) : m_pDeps(deps)
92 std::vector<ArchNetAddress>
nameToAddr(
const std::string &)
override;
103 const int *getUnblockPipe();
104 const int *getUnblockPipeForThread(
ArchThread);
105 void setBlockingOnSocket(
int fd,
bool blocking)
const;
106 [[noreturn]]
void throwError(
int)
const override;
107 [[noreturn]]
void throwNameError(
int)
const override;
109 std::shared_ptr<Deps> m_pDeps;
char optval_t
Definition ArchNetworkBSD.h:24
static void FAR int len
Definition ArchNetworkWinsock.cpp:38
static const struct sockaddr FAR * name
Definition ArchNetworkWinsock.cpp:28
static struct sockaddr FAR * addr
Definition ArchNetworkWinsock.cpp:25
static fd_set FAR fd_set FAR fd_set FAR const struct timeval FAR * timeout
Definition ArchNetworkWinsock.cpp:40
static void FAR * buf
Definition ArchNetworkWinsock.cpp:38
ArchThreadImpl * ArchThread
Opaque thread type. An opaque type representing a thread.
Definition IArchMultithread.h:54
ArchNetAddressImpl * ArchNetAddress
Opaque network address type. An opaque type representing a network address.
Definition IArchNetwork.h:45
ArchSocketImpl * ArchSocket
Opaque socket type. An opaque type representing a socket.
Definition IArchNetwork.h:30
struct sockaddr_storage m_addr
Definition ArchNetworkBSD.h:42
ArchNetAddressImpl()
Definition ArchNetworkBSD.h:36
socklen_t m_len
Definition ArchNetworkBSD.h:43
ArchSocket newSocket(AddressFamily, SocketType) override
Create a new socket.
Definition ArchNetworkBSD.cpp:73
ArchNetworkBSD(ArchNetworkBSD &&)=delete
void closeSocket(ArchSocket s) override
Release a socket reference.
Definition ArchNetworkBSD.cpp:104
ArchNetworkBSD(std::shared_ptr< Deps > deps=std::make_shared< Deps >())
Definition ArchNetworkBSD.h:61
ArchNetAddress newAnyAddr(AddressFamily) override
Create an "any" network address.
Definition ArchNetworkBSD.cpp:434
~ArchNetworkBSD() override=default
ArchSocket acceptSocket(ArchSocket s, ArchNetAddress *addr) override
Accept connection on socket.
Definition ArchNetworkBSD.cpp:168
void closeSocketForRead(ArchSocket s) override
Close socket for further reads.
Definition ArchNetworkBSD.cpp:130
bool isEqualAddr(ArchNetAddress, ArchNetAddress) override
Test addresses for equality.
Definition ArchNetworkBSD.cpp:675
bool setReuseAddrOnSocket(ArchSocket, bool reuse) override
Turn address reuse on or off on socket.
Definition ArchNetworkBSD.cpp:414
ArchNetAddress copyAddr(ArchNetAddress) override
Copy a network address.
Definition ArchNetworkBSD.cpp:469
void unblockPollSocket(ArchThread thread) override
Unblock thread in pollSocket().
Definition ArchNetworkBSD.cpp:322
std::string addrToString(ArchNetAddress) override
Convert an address to a string.
Definition ArchNetworkBSD.cpp:549
std::string addrToName(ArchNetAddress) override
Convert an address to a host name.
Definition ArchNetworkBSD.cpp:528
std::vector< ArchNetAddress > nameToAddr(const std::string &) override
Convert a name to a network address.
Definition ArchNetworkBSD.cpp:477
ArchNetworkBSD & operator=(ArchNetworkBSD &&)=delete
ArchSocket copySocket(ArchSocket s) override
Copy a socket object.
Definition ArchNetworkBSD.cpp:94
ArchNetworkBSD(ArchNetworkBSD const &)=delete
void bindSocket(ArchSocket s, ArchNetAddress addr) override
Bind socket to address.
Definition ArchNetworkBSD.cpp:148
void throwErrorOnSocket(ArchSocket) override
Check error on socket.
Definition ArchNetworkBSD.cpp:359
void init() override
Definition ArchNetworkBSD.cpp:68
bool setNoDelayOnSocket(ArchSocket, bool noDelay) override
Turn Nagle algorithm on or off on socket.
Definition ArchNetworkBSD.cpp:394
AddressFamily getAddrFamily(ArchNetAddress) override
Get an address's family.
Definition ArchNetworkBSD.cpp:582
size_t writeSocket(ArchSocket s, const void *buf, size_t len) override
Write data from socket.
Definition ArchNetworkBSD.cpp:345
size_t readSocket(ArchSocket s, void *buf, size_t len) override
Read data from socket.
Definition ArchNetworkBSD.cpp:331
bool connectSocket(ArchSocket s, ArchNetAddress name) override
Connect socket.
Definition ArchNetworkBSD.cpp:219
int getAddrPort(ArchNetAddress) override
Get the port of an address.
Definition ArchNetworkBSD.cpp:624
void setAddrPort(ArchNetAddress, int port) override
Set the port of an address.
Definition ArchNetworkBSD.cpp:599
void listenOnSocket(ArchSocket s) override
Listen for connections on socket.
Definition ArchNetworkBSD.cpp:158
void closeSocketForWrite(ArchSocket s) override
Close socket for further writes.
Definition ArchNetworkBSD.cpp:139
int pollSocket(PollEntry[], int num, double timeout) override
Check socket state.
Definition ArchNetworkBSD.cpp:236
ArchNetworkBSD & operator=(ArchNetworkBSD const &)=delete
bool isAnyAddr(ArchNetAddress) override
Test for the "any" address.
Definition ArchNetworkBSD.cpp:647
void closeAddr(ArchNetAddress) override
Destroy a network address.
Definition ArchNetworkBSD.cpp:521
Internal socket data. An architecture dependent type holding the necessary data for a socket.
Definition ArchNetworkBSD.h:27
int m_fd
Definition ArchNetworkBSD.h:29
int m_refCount
Definition ArchNetworkBSD.h:30
A socket query for poll().
Definition IArchNetwork.h:86
Interface for architecture dependent networking.
Definition IArchNetwork.h:53
SocketType
Supported socket types.
Definition IArchNetwork.h:66
AddressFamily
Supported address families.
Definition IArchNetwork.h:58
Definition ArchNetworkBSD.h:52
virtual void sleep(double)
Definition ArchNetworkBSD.cpp:39
virtual void testCancelThread()
Definition ArchNetworkBSD.cpp:59
virtual ssize_t read(int, void *, size_t)
Definition ArchNetworkBSD.cpp:54
virtual std::shared_ptr< struct pollfd[]> makePollFD(nfds_t)
Definition ArchNetworkBSD.cpp:49
virtual int poll(struct pollfd *, nfds_t, int)
Definition ArchNetworkBSD.cpp:44