12#ifndef INCL_WINSOCK_API_PROTOTYPES
13#define INCL_WINSOCK_API_PROTOTYPES 0
15#define INCL_WINSOCK_API_TYPEDEFS 0
21#define WIN32_LEAN_AND_MEAN
26#pragma comment(lib, "ws2_32.lib")
28#define ARCH_NETWORK ArchNetworkWinsock
46 struct sockaddr_storage
m_addr;
48#define ADDR_HDR_SIZE offsetof(ArchNetAddressImpl, m_addr)
49#define TYPED_ADDR(type_, addr_) (reinterpret_cast<type_ *>(&addr_->m_addr))
80 std::vector<ArchNetAddress>
nameToAddr(
const std::string &)
override;
91 void initModule(HMODULE);
93 void setBlockingOnSocket(
SOCKET,
bool blocking);
95 [[noreturn]]
void throwError(
int)
const override;
96 [[noreturn]]
void throwNameError(
int)
const override;
98 using EventList = std::list<WSAEVENT>;
101 EventList m_unblockEvents;
static void FAR int len
Definition ArchNetworkWinsock.cpp:37
static const struct sockaddr FAR * name
Definition ArchNetworkWinsock.cpp:27
static struct sockaddr FAR * addr
Definition ArchNetworkWinsock.cpp:24
static SOCKET(PASCAL FAR *accept_winsock)(SOCKET s
static fd_set FAR fd_set FAR fd_set FAR const struct timeval FAR * timeout
Definition ArchNetworkWinsock.cpp:39
static void FAR * buf
Definition ArchNetworkWinsock.cpp:37
static WSAEVENT
Definition ArchNetworkWinsock.cpp:53
ArchThreadImpl * ArchThread
Opaque thread type. An opaque type representing a thread.
Definition IArchMultithread.h:53
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
Internal network address data. An architecture dependent type holding the necessary data for a networ...
Definition ArchNetworkBSD.h:34
struct sockaddr_storage m_addr
Definition ArchNetworkBSD.h:42
static ArchNetAddressImpl * alloc(size_t)
Definition ArchNetworkWinsock.cpp:73
socklen_t m_len
Definition ArchNetworkBSD.h:43
std::string getHostName() override
Return local host's name.
Definition ArchNetworkWinsock.cpp:628
void closeAddr(ArchNetAddress) override
Destroy a network address.
Definition ArchNetworkWinsock.cpp:707
void setAddrPort(ArchNetAddress, int port) override
Set the port of an address.
Definition ArchNetworkWinsock.cpp:771
void init() override
Definition ArchNetworkWinsock.cpp:101
void closeSocketForRead(ArchSocket s) override
Close socket for further reads.
Definition ArchNetworkWinsock.cpp:260
std::string addrToString(ArchNetAddress) override
Convert an address to a string.
Definition ArchNetworkWinsock.cpp:732
bool connectSocket(ArchSocket s, ArchNetAddress name) override
Connect socket.
Definition ArchNetworkWinsock.cpp:352
ArchSocket newSocket(AddressFamily, SocketType) override
Create a new socket.
Definition ArchNetworkWinsock.cpp:195
void bindSocket(ArchSocket s, ArchNetAddress addr) override
Bind socket to address.
Definition ArchNetworkWinsock.cpp:282
ArchSocket acceptSocket(ArchSocket s, ArchNetAddress *addr) override
Accept connection on socket.
Definition ArchNetworkWinsock.cpp:302
std::vector< ArchNetAddress > nameToAddr(const std::string &) override
Convert a name to a network address.
Definition ArchNetworkWinsock.cpp:676
void closeSocketForWrite(ArchSocket s) override
Close socket for further writes.
Definition ArchNetworkWinsock.cpp:271
bool isAnyAddr(ArchNetAddress) override
Test for the "any" address.
Definition ArchNetworkWinsock.cpp:815
AddressFamily getAddrFamily(ArchNetAddress) override
Get an address's family.
Definition ArchNetworkWinsock.cpp:755
void closeSocket(ArchSocket s) override
Release a socket reference.
Definition ArchNetworkWinsock.cpp:233
int pollSocket(PollEntry[], int num, double timeout) override
Check socket state.
Definition ArchNetworkWinsock.cpp:369
std::string addrToName(ArchNetAddress) override
Convert an address to a host name.
Definition ArchNetworkWinsock.cpp:714
void unblockPollSocket(ArchThread thread) override
Unblock thread in pollSocket()
Definition ArchNetworkWinsock.cpp:515
void throwErrorOnSocket(ArchSocket) override
Check error on socket.
Definition ArchNetworkWinsock.cpp:559
ArchNetAddress copyAddr(ArchNetAddress) override
Copy a network address.
Definition ArchNetworkWinsock.cpp:667
bool setNoDelayOnSocket(ArchSocket, bool noDelay) override
Turn Nagle algorithm on or off on socket.
Definition ArchNetworkWinsock.cpp:586
int getAddrPort(ArchNetAddress) override
Get the port of an address.
Definition ArchNetworkWinsock.cpp:794
size_t writeSocket(ArchSocket s, const void *buf, size_t len) override
Write data from socket.
Definition ArchNetworkWinsock.cpp:540
size_t readSocket(ArchSocket s, void *buf, size_t len) override
Read data from socket.
Definition ArchNetworkWinsock.cpp:525
ArchNetAddress newAnyAddr(AddressFamily) override
Create an "any" network address.
Definition ArchNetworkWinsock.cpp:639
bool isEqualAddr(ArchNetAddress, ArchNetAddress) override
Test addresses for equality.
Definition ArchNetworkWinsock.cpp:838
~ArchNetworkWinsock() override
Definition ArchNetworkWinsock.cpp:85
void listenOnSocket(ArchSocket s) override
Listen for connections on socket.
Definition ArchNetworkWinsock.cpp:292
ArchNetworkWinsock()=default
bool setReuseAddrOnSocket(ArchSocket, bool reuse) override
Turn address reuse on or off on socket.
Definition ArchNetworkWinsock.cpp:607
ArchSocket copySocket(ArchSocket s) override
Copy a socket object.
Definition ArchNetworkWinsock.cpp:223
Internal socket data. An architecture dependent type holding the necessary data for a socket.
Definition ArchNetworkBSD.h:27
bool m_pollWrite
Definition ArchNetworkWinsock.h:36
WSAEVENT m_event
Definition ArchNetworkWinsock.h:35
SOCKET m_socket
Definition ArchNetworkWinsock.h:33
int m_refCount
Definition ArchNetworkBSD.h:30
A socket query for poll()
Definition IArchNetwork.h:85
Interface for architecture dependent networking.
Definition IArchNetwork.h:53
SocketType
Supported socket types.
Definition IArchNetwork.h:65
AddressFamily
Supported address families.
Definition IArchNetwork.h:57