Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qabstractsocket.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QABSTRACTSOCKET_H
6#define QABSTRACTSOCKET_H
7
8#include <QtNetwork/qtnetworkglobal.h>
9#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) || defined(Q_QDOC)
10#include <QtNetwork/qhostaddress.h>
11#endif
12#include <QtCore/qiodevice.h>
13#include <QtCore/qobject.h>
14
16
17class QDebug;
18
19class QHostAddress;
20#ifndef QT_NO_NETWORKPROXY
21class QNetworkProxy;
22#endif
23class QAbstractSocketPrivate;
24class QAuthenticator;
25
26namespace QtPrivate {
28{
29#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0)
30 // compatibility with Qt 4 to 6
32 static constexpr auto IPv4Protocol = QHostAddress::IPv4Protocol;
33 static constexpr auto IPv6Protocol = QHostAddress::IPv6Protocol;
34 static constexpr auto AnyIPProtocol = QHostAddress::AnyIPProtocol;
36#endif
37};
38}
39
40class Q_NETWORK_EXPORT QAbstractSocket : public QIODevice
41 QT7_ONLY(, public QtPrivate::QAbstractSocketConstants)
42{
43 Q_OBJECT
44 Q_MOC_INCLUDE(<QtNetwork/qauthenticator.h>)
45
46public:
47 enum SocketType {
48 TcpSocket,
49 UdpSocket,
50 SctpSocket,
51 UnknownSocketType = -1
52 };
53 Q_ENUM(SocketType)
54
55#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
56 enum NetworkLayerProtocol {
57 IPv4Protocol,
58 IPv6Protocol,
59 AnyIPProtocol,
60 UnknownNetworkLayerProtocol = -1
61 };
62 Q_ENUM(NetworkLayerProtocol)
63#endif
64
65 enum SocketError {
66 ConnectionRefusedError,
67 RemoteHostClosedError,
68 HostNotFoundError,
69 SocketAccessError,
70 SocketResourceError,
71 SocketTimeoutError, /* 5 */
72 DatagramTooLargeError,
73 NetworkError,
74 AddressInUseError,
75 SocketAddressNotAvailableError,
76 UnsupportedSocketOperationError, /* 10 */
77 UnfinishedSocketOperationError,
78 ProxyAuthenticationRequiredError,
79 SslHandshakeFailedError,
80 ProxyConnectionRefusedError,
81 ProxyConnectionClosedError, /* 15 */
82 ProxyConnectionTimeoutError,
83 ProxyNotFoundError,
84 ProxyProtocolError,
85 OperationError,
86 SslInternalError, /* 20 */
87 SslInvalidUserDataError,
88 TemporaryError,
89
90 UnknownSocketError = -1
91 };
92 Q_ENUM(SocketError)
93 enum SocketState {
94 UnconnectedState,
95 HostLookupState,
96 ConnectingState,
97 ConnectedState,
98 BoundState,
99 ListeningState,
100 ClosingState
101 };
102 Q_ENUM(SocketState)
103 enum SocketOption {
104 LowDelayOption, // TCP_NODELAY
105 KeepAliveOption, // SO_KEEPALIVE
106 MulticastTtlOption, // IP_MULTICAST_TTL
107 MulticastLoopbackOption, // IP_MULTICAST_LOOPBACK
108 TypeOfServiceOption, //IP_TOS
109 SendBufferSizeSocketOption, //SO_SNDBUF
110 ReceiveBufferSizeSocketOption, //SO_RCVBUF
111 PathMtuSocketOption // IP_MTU
112 };
113 Q_ENUM(SocketOption)
114 enum BindFlag {
115 DefaultForPlatform = 0x0,
116 ShareAddress = 0x1,
117 DontShareAddress = 0x2,
118 ReuseAddressHint = 0x4
119 };
120 Q_DECLARE_FLAGS(BindMode, BindFlag)
121 enum PauseMode {
122 PauseNever = 0x0,
123 PauseOnSslErrors = 0x1
124 };
125 Q_DECLARE_FLAGS(PauseModes, PauseMode)
126
127 QAbstractSocket(SocketType socketType, QObject *parent);
128 virtual ~QAbstractSocket();
129
130 virtual void resume(); // to continue after proxy authentication required, SSL errors etc.
131 PauseModes pauseMode() const;
132 void setPauseMode(PauseModes pauseMode);
133
134 virtual bool bind(const QHostAddress &address, quint16 port = 0,
135 BindMode mode = DefaultForPlatform);
136#if QT_VERSION >= QT_VERSION_CHECK(7,0,0) || defined(Q_QDOC)
137 bool bind(QHostAddress::SpecialAddress addr, quint16 port = 0, BindMode mode = DefaultForPlatform)
138 { return bind(QHostAddress(addr), port, mode); }
139 bool bind(quint16 port = 0, BindMode mode = DefaultForPlatform)
140 { return bind(QHostAddress::Any, port, mode); }
141#else
142 bool bind(quint16 port = 0, BindMode mode = DefaultForPlatform);
143#endif
144
145 virtual void connectToHost(const QString &hostName, quint16 port, OpenMode mode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);
146 void connectToHost(const QHostAddress &address, quint16 port, OpenMode mode = ReadWrite);
147 virtual void disconnectFromHost();
148
149 bool isValid() const;
150
151 qint64 bytesAvailable() const override;
152 qint64 bytesToWrite() const override;
153
154 quint16 localPort() const;
155 QHostAddress localAddress() const;
156 quint16 peerPort() const;
157 QHostAddress peerAddress() const;
158 QString peerName() const;
159
160 qint64 readBufferSize() const;
161 virtual void setReadBufferSize(qint64 size);
162
163 void abort();
164
165 virtual qintptr socketDescriptor() const;
166 virtual bool setSocketDescriptor(qintptr socketDescriptor, SocketState state = ConnectedState,
167 OpenMode openMode = ReadWrite);
168
169 virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value);
170 virtual QVariant socketOption(QAbstractSocket::SocketOption option);
171
172 SocketType socketType() const;
173 SocketState state() const;
174 SocketError error() const;
175
176 // from QIODevice
177 void close() override;
178 bool isSequential() const override;
179 bool flush();
180
181 // for synchronous access
182 virtual bool waitForConnected(int msecs = 30000);
183 bool waitForReadyRead(int msecs = 30000) override;
184 bool waitForBytesWritten(int msecs = 30000) override;
185 virtual bool waitForDisconnected(int msecs = 30000);
186
187#ifndef QT_NO_NETWORKPROXY
188 void setProxy(const QNetworkProxy &networkProxy);
189 QNetworkProxy proxy() const;
190 QString protocolTag() const;
191 void setProtocolTag(const QString &tag);
192#endif
193
194Q_SIGNALS:
195 void hostFound();
196 void connected();
197 void disconnected();
198 void stateChanged(QAbstractSocket::SocketState);
199 void errorOccurred(QAbstractSocket::SocketError);
200#ifndef QT_NO_NETWORKPROXY
201 void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
202#endif
203
204protected:
205 qint64 readData(char *data, qint64 maxlen) override;
206 qint64 readLineData(char *data, qint64 maxlen) override;
207 qint64 skipData(qint64 maxSize) override;
208 qint64 writeData(const char *data, qint64 len) override;
209
210 void setSocketState(SocketState state);
211 void setSocketError(SocketError socketError);
212 void setLocalPort(quint16 port);
213 void setLocalAddress(const QHostAddress &address);
214 void setPeerPort(quint16 port);
215 void setPeerAddress(const QHostAddress &address);
216 void setPeerName(const QString &name);
217
218 QAbstractSocket(SocketType socketType, QAbstractSocketPrivate &dd, QObject *parent = nullptr);
219
220private:
221 Q_DECLARE_PRIVATE(QAbstractSocket)
222 Q_DISABLE_COPY_MOVE(QAbstractSocket)
223
224 Q_PRIVATE_SLOT(d_func(), void _q_connectToNextAddress())
225 Q_PRIVATE_SLOT(d_func(), void _q_startConnecting(const QHostInfo &))
226 Q_PRIVATE_SLOT(d_func(), void _q_abortConnectionAttempt())
227 Q_PRIVATE_SLOT(d_func(), void _q_testConnection())
228};
229
230
231Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractSocket::BindMode)
232Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractSocket::PauseModes)
233
234#ifndef QT_NO_DEBUG_STREAM
235Q_NETWORK_EXPORT QDebug operator<<(QDebug, QAbstractSocket::SocketError);
236Q_NETWORK_EXPORT QDebug operator<<(QDebug, QAbstractSocket::SocketState);
237#endif
238
239QT_END_NAMESPACE
240
241QT_DECL_METATYPE_EXTERN_TAGGED(QAbstractSocket::SocketState,
242 QAbstractSocket__SocketState, Q_NETWORK_EXPORT)
243QT_DECL_METATYPE_EXTERN_TAGGED(QAbstractSocket::SocketError,
244 QAbstractSocket__SocketError, Q_NETWORK_EXPORT)
245
246#endif // QABSTRACTSOCKET_H
The QAbstractSocket class provides the base functionality common to all socket types.
\inmodule QtCore\reentrant
Definition qdatastream.h:50
bool parse(const QString &ipString)
void setAddress(const quint8 *a_)
AddressClassification classify() const
void setAddress(const Q_IPV6ADDR &a_)
static AddressClassification classify(const QHostAddress &address)
void setAddress(quint32 a_=0)
The QHostAddress class provides an IP address.
QDataStream & operator>>(QDataStream &in, QHostAddress &address)
Reads a host address into address from the stream in and returns a reference to the stream.
bool setAddress(const QHostAddress &address)
int prefixLength() const
void setPrefixLength(QAbstractSocket::NetworkLayerProtocol proto, int len)
constexpr QNetmask()
QHostAddress address(QAbstractSocket::NetworkLayerProtocol protocol) const
friend bool operator==(QNetmask n1, QNetmask n2)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2568
static bool convertToIpv4(quint32 &a, const Q_IPV6ADDR &a6, const QHostAddress::ConversionMode mode)
size_t qHash(const QHostAddress &key, size_t seed) noexcept
static bool parseIp6(const QString &address, QIPAddressUtils::IPv6Address &addr, QString *scopeId)
static void clearBits(quint8 *where, int start, int end)
QIPv6Address Q_IPV6ADDR
#define AF_INET6