Deskflow 1.26.0.418
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
ArchNetworkWinsock.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2026 Deskflow Developers
4 * SPDX-FileCopyrightText: (C) 2012 - 2016 Synergy App Ltd
5 * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
6 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
7 */
8
9#pragma once
10
11#include <ws2tcpip.h>
12// declare no functions in winsock2
13#ifndef INCL_WINSOCK_API_PROTOTYPES
14#define INCL_WINSOCK_API_PROTOTYPES 0
15#endif
16#define INCL_WINSOCK_API_TYPEDEFS 0
17
19#include "arch/IArchNetwork.h"
20
21#include <WinSock2.h>
22#define WIN32_LEAN_AND_MEAN
23#include <Windows.h>
24#include <list>
25#include <mutex>
26
27#pragma comment(lib, "ws2_32.lib")
28
29#define ARCH_NETWORK ArchNetworkWinsock
30
32{
33public:
34 SOCKET m_socket;
35 int m_refCount;
38};
39
41{
42public:
43 static ArchNetAddressImpl *alloc(size_t);
44
45public:
46 int m_len;
47 struct sockaddr_storage m_addr;
48};
49#define ADDR_HDR_SIZE offsetof(ArchNetAddressImpl, m_addr)
50#define TYPED_ADDR(type_, addr_) (reinterpret_cast<type_ *>(&addr_->m_addr))
51
54{
55public:
56 ArchNetworkWinsock() = default;
57 ~ArchNetworkWinsock() override;
58
59 void init() override;
60
61 // IArchNetwork overrides
64 void closeSocket(ArchSocket s) override;
65 void closeSocketForRead(ArchSocket s) override;
66 void closeSocketForWrite(ArchSocket s) override;
67 void bindSocket(ArchSocket s, ArchNetAddress addr) override;
68 void listenOnSocket(ArchSocket s) override;
71 int pollSocket(PollEntry[], int num, double timeout) override;
72 void unblockPollSocket(ArchThread thread) override;
73 size_t readSocket(ArchSocket s, void *buf, size_t len) override;
74 size_t writeSocket(ArchSocket s, const void *buf, size_t len) override;
75 void resetPollWriteOnSocket(ArchSocket s) override;
76 void throwErrorOnSocket(ArchSocket) override;
77 bool setNoDelayOnSocket(ArchSocket, bool noDelay) override;
78 void setKeepAliveOnSocket(ArchSocket, bool keepAlive) override;
79 bool setReuseAddrOnSocket(ArchSocket, bool reuse) override;
82 std::vector<ArchNetAddress> nameToAddr(const std::string &) override;
83 void closeAddr(ArchNetAddress) override;
84 std::string addrToName(ArchNetAddress) override;
85 std::string addrToString(ArchNetAddress) override;
87 void setAddrPort(ArchNetAddress, int port) override;
88 int getAddrPort(ArchNetAddress) override;
89 bool isAnyAddr(ArchNetAddress) override;
91
92private:
93 void initModule(HMODULE);
94
95 void setBlockingOnSocket(SOCKET, bool blocking);
96
97 [[noreturn]] void throwError(int) const override;
98 [[noreturn]] void throwNameError(int) const override;
99
100 using EventList = std::list<WSAEVENT>;
101
102 std::mutex m_mutex;
103 EventList m_unblockEvents;
104};
static void FAR int len
Definition ArchNetworkWinsock.cpp:39
static const struct sockaddr FAR * name
Definition ArchNetworkWinsock.cpp:29
static struct sockaddr FAR * addr
Definition ArchNetworkWinsock.cpp:26
static fd_set FAR fd_set FAR fd_set FAR const struct timeval FAR * timeout
Definition ArchNetworkWinsock.cpp:41
static void FAR * buf
Definition ArchNetworkWinsock.cpp:39
static WSAEVENT
Definition ArchNetworkWinsock.cpp:55
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
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:75
socklen_t m_len
Definition ArchNetworkBSD.h:43
void closeAddr(ArchNetAddress) override
Destroy a network address.
Definition ArchNetworkWinsock.cpp:700
void setAddrPort(ArchNetAddress, int port) override
Set the port of an address.
Definition ArchNetworkWinsock.cpp:764
void init() override
Definition ArchNetworkWinsock.cpp:103
void closeSocketForRead(ArchSocket s) override
Close socket for further reads.
Definition ArchNetworkWinsock.cpp:262
void setKeepAliveOnSocket(ArchSocket, bool keepAlive) override
Turn keep-alive on or off on socket.
Definition ArchNetworkWinsock.cpp:615
std::string addrToString(ArchNetAddress) override
Convert an address to a string.
Definition ArchNetworkWinsock.cpp:725
bool connectSocket(ArchSocket s, ArchNetAddress name) override
Connect socket.
Definition ArchNetworkWinsock.cpp:354
ArchSocket newSocket(AddressFamily, SocketType) override
Create a new socket.
Definition ArchNetworkWinsock.cpp:197
void bindSocket(ArchSocket s, ArchNetAddress addr) override
Bind socket to address.
Definition ArchNetworkWinsock.cpp:284
ArchSocket acceptSocket(ArchSocket s, ArchNetAddress *addr) override
Accept connection on socket.
Definition ArchNetworkWinsock.cpp:304
std::vector< ArchNetAddress > nameToAddr(const std::string &) override
Convert a name to a network address.
Definition ArchNetworkWinsock.cpp:669
void closeSocketForWrite(ArchSocket s) override
Close socket for further writes.
Definition ArchNetworkWinsock.cpp:273
bool isAnyAddr(ArchNetAddress) override
Test for the "any" address.
Definition ArchNetworkWinsock.cpp:808
AddressFamily getAddrFamily(ArchNetAddress) override
Get an address's family.
Definition ArchNetworkWinsock.cpp:748
void closeSocket(ArchSocket s) override
Release a socket reference.
Definition ArchNetworkWinsock.cpp:235
int pollSocket(PollEntry[], int num, double timeout) override
Check socket state.
Definition ArchNetworkWinsock.cpp:371
std::string addrToName(ArchNetAddress) override
Convert an address to a host name.
Definition ArchNetworkWinsock.cpp:707
void unblockPollSocket(ArchThread thread) override
Unblock thread in pollSocket().
Definition ArchNetworkWinsock.cpp:517
void resetPollWriteOnSocket(ArchSocket s) override
Reset the writable poll hint for a socket.
Definition ArchNetworkWinsock.cpp:561
void throwErrorOnSocket(ArchSocket) override
Check error on socket.
Definition ArchNetworkWinsock.cpp:567
ArchNetAddress copyAddr(ArchNetAddress) override
Copy a network address.
Definition ArchNetworkWinsock.cpp:660
bool setNoDelayOnSocket(ArchSocket, bool noDelay) override
Turn Nagle algorithm on or off on socket.
Definition ArchNetworkWinsock.cpp:594
int getAddrPort(ArchNetAddress) override
Get the port of an address.
Definition ArchNetworkWinsock.cpp:787
size_t writeSocket(ArchSocket s, const void *buf, size_t len) override
Write data from socket.
Definition ArchNetworkWinsock.cpp:542
size_t readSocket(ArchSocket s, void *buf, size_t len) override
Read data from socket.
Definition ArchNetworkWinsock.cpp:527
ArchNetAddress newAnyAddr(AddressFamily) override
Create an "any" network address.
Definition ArchNetworkWinsock.cpp:632
bool isEqualAddr(ArchNetAddress, ArchNetAddress) override
Test addresses for equality.
Definition ArchNetworkWinsock.cpp:831
void listenOnSocket(ArchSocket s) override
Listen for connections on socket.
Definition ArchNetworkWinsock.cpp:294
ArchNetworkWinsock()=default
bool setReuseAddrOnSocket(ArchSocket, bool reuse) override
Turn address reuse on or off on socket.
Definition ArchNetworkWinsock.cpp:626
ArchSocket copySocket(ArchSocket s) override
Copy a socket object.
Definition ArchNetworkWinsock.cpp:225
Internal socket data. An architecture dependent type holding the necessary data for a socket.
Definition ArchNetworkBSD.h:27
bool m_pollWrite
Definition ArchNetworkWinsock.h:37
WSAEVENT m_event
Definition ArchNetworkWinsock.h:36
SOCKET m_socket
Definition ArchNetworkWinsock.h:34
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