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
26class Q_NETWORK_EXPORT QAbstractSocket : public QIODevice
27{
28 Q_OBJECT
29
30public:
31 enum SocketType {
32 TcpSocket,
33 UdpSocket,
34 SctpSocket,
35 UnknownSocketType = -1
36 };
37 Q_ENUM(SocketType)
38
39#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
40 enum NetworkLayerProtocol {
41 IPv4Protocol,
42 IPv6Protocol,
43 AnyIPProtocol,
44 UnknownNetworkLayerProtocol = -1
45 };
46 Q_ENUM(NetworkLayerProtocol)
47#else
48 // compatibility with Qt 4 to 6
49 using NetworkLayerProtocol = QHostAddress::NetworkLayerProtocol;
50 using enum NetworkLayerProtocol;
51#endif
52
53 enum SocketError {
54 ConnectionRefusedError,
55 RemoteHostClosedError,
56 HostNotFoundError,
57 SocketAccessError,
58 SocketResourceError,
59 SocketTimeoutError, /* 5 */
60 DatagramTooLargeError,
61 NetworkError,
62 AddressInUseError,
63 SocketAddressNotAvailableError,
64 UnsupportedSocketOperationError, /* 10 */
65 UnfinishedSocketOperationError,
66 ProxyAuthenticationRequiredError,
67 SslHandshakeFailedError,
68 ProxyConnectionRefusedError,
69 ProxyConnectionClosedError, /* 15 */
70 ProxyConnectionTimeoutError,
71 ProxyNotFoundError,
72 ProxyProtocolError,
73 OperationError,
74 SslInternalError, /* 20 */
75 SslInvalidUserDataError,
76 TemporaryError,
77
78 UnknownSocketError = -1
79 };
80 Q_ENUM(SocketError)
81 enum SocketState {
82 UnconnectedState,
83 HostLookupState,
84 ConnectingState,
85 ConnectedState,
86 BoundState,
87 ListeningState,
88 ClosingState
89 };
90 Q_ENUM(SocketState)
91 enum SocketOption {
92 LowDelayOption, // TCP_NODELAY
93 KeepAliveOption, // SO_KEEPALIVE
94 MulticastTtlOption, // IP_MULTICAST_TTL
95 MulticastLoopbackOption, // IP_MULTICAST_LOOPBACK
96 TypeOfServiceOption, //IP_TOS
97 SendBufferSizeSocketOption, //SO_SNDBUF
98 ReceiveBufferSizeSocketOption, //SO_RCVBUF
99 PathMtuSocketOption, // IP_MTU
100 KeepAliveIdleOption, // TCP_KEEPIDLE
101 KeepAliveIntervalOption, // TCP_KEEPINTVL
102 KeepAliveCountOption, // TCP_KEEPCNT
103 };
104 Q_ENUM(SocketOption)
105 enum BindFlag {
106 DefaultForPlatform = 0x0,
107 ShareAddress = 0x1,
108 DontShareAddress = 0x2,
109 ReuseAddressHint = 0x4
110 };
111 Q_DECLARE_FLAGS(BindMode, BindFlag)
112 enum PauseMode {
113 PauseNever = 0x0,
114 PauseOnSslErrors = 0x1
115 };
116 Q_DECLARE_FLAGS(PauseModes, PauseMode)
117
118 QAbstractSocket(SocketType socketType, QObject *parent);
119 virtual ~QAbstractSocket();
120
121 virtual void resume(); // to continue after proxy authentication required, SSL errors etc.
122 PauseModes pauseMode() const;
123 void setPauseMode(PauseModes pauseMode);
124
125 virtual bool bind(const QHostAddress &address, quint16 port = 0,
126 BindMode mode = DefaultForPlatform);
127#if QT_VERSION >= QT_VERSION_CHECK(7,0,0) || defined(Q_QDOC)
128 bool bind(QHostAddress::SpecialAddress addr, quint16 port = 0, BindMode mode = DefaultForPlatform)
129 { return bind(QHostAddress(addr), port, mode); }
130 bool bind(quint16 port = 0, BindMode mode = DefaultForPlatform)
131 { return bind(QHostAddress::Any, port, mode); }
132#else
133 bool bind(quint16 port = 0, BindMode mode = DefaultForPlatform);
134#endif
135
136 virtual void connectToHost(const QString &hostName, quint16 port, OpenMode mode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);
137 void connectToHost(const QHostAddress &address, quint16 port, OpenMode mode = ReadWrite);
138 virtual void disconnectFromHost();
139
140 bool isValid() const;
141
142 qint64 bytesAvailable() const override;
143 qint64 bytesToWrite() const override;
144
145 quint16 localPort() const;
146 QHostAddress localAddress() const;
147 quint16 peerPort() const;
148 QHostAddress peerAddress() const;
149 QString peerName() const;
150
151 qint64 readBufferSize() const;
152 virtual void setReadBufferSize(qint64 size);
153
154 void abort();
155
156 virtual qintptr socketDescriptor() const;
157 virtual bool setSocketDescriptor(qintptr socketDescriptor, SocketState state = ConnectedState,
158 OpenMode openMode = ReadWrite);
159
160 virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value);
161 virtual QVariant socketOption(QAbstractSocket::SocketOption option);
162
163 SocketType socketType() const;
164 SocketState state() const;
165 SocketError error() const;
166
167 // from QIODevice
168 void close() override;
169 bool isSequential() const override;
170 bool flush();
171
172 // for synchronous access
173 virtual bool waitForConnected(int msecs = 30000);
174 bool waitForReadyRead(int msecs = 30000) override;
175 bool waitForBytesWritten(int msecs = 30000) override;
176 virtual bool waitForDisconnected(int msecs = 30000);
177
178#ifndef QT_NO_NETWORKPROXY
179 void setProxy(const QNetworkProxy &networkProxy);
180 QNetworkProxy proxy() const;
181 QString protocolTag() const;
182 void setProtocolTag(const QString &tag);
183#endif
184
185Q_SIGNALS:
186 void hostFound();
187 void connected();
188 void disconnected();
189 void stateChanged(QAbstractSocket::SocketState);
190 void errorOccurred(QAbstractSocket::SocketError);
191#ifndef QT_NO_NETWORKPROXY
192 void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
193#endif
194
195protected:
196 qint64 readData(char *data, qint64 maxlen) override;
197 qint64 readLineData(char *data, qint64 maxlen) override;
198 qint64 skipData(qint64 maxSize) override;
199 qint64 writeData(const char *data, qint64 len) override;
200
201 void setSocketState(SocketState state);
202 void setSocketError(SocketError socketError);
203 void setLocalPort(quint16 port);
204 void setLocalAddress(const QHostAddress &address);
205 void setPeerPort(quint16 port);
206 void setPeerAddress(const QHostAddress &address);
207 void setPeerName(const QString &name);
208
209 QAbstractSocket(SocketType socketType, QAbstractSocketPrivate &dd, QObject *parent = nullptr);
210
211private:
212 Q_DECLARE_PRIVATE(QAbstractSocket)
213 Q_DISABLE_COPY_MOVE(QAbstractSocket)
214
215 Q_PRIVATE_SLOT(d_func(), void _q_connectToNextAddress())
216 Q_PRIVATE_SLOT(d_func(), void _q_startConnecting(const QHostInfo &))
217 Q_PRIVATE_SLOT(d_func(), void _q_abortConnectionAttempt())
218 Q_PRIVATE_SLOT(d_func(), void _q_testConnection())
219};
220
221
222Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractSocket::BindMode)
223Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractSocket::PauseModes)
224
225#if QT_NETWORK_REMOVED_SINCE(6, 12)
226#ifndef QT_NO_DEBUG_STREAM
227Q_NETWORK_EXPORT QDebug operator<<(QDebug, QAbstractSocket::SocketError);
228Q_NETWORK_EXPORT QDebug operator<<(QDebug, QAbstractSocket::SocketState);
229#endif
230#endif // QT_NETWORK_REMOVED_SINCE(6, 12)
231
232QT_END_NAMESPACE
233
234QT_DECL_METATYPE_EXTERN_TAGGED(QAbstractSocket::SocketState,
235 QAbstractSocket__SocketState, Q_NETWORK_EXPORT)
236QT_DECL_METATYPE_EXTERN_TAGGED(QAbstractSocket::SocketError,
237 QAbstractSocket__SocketError, Q_NETWORK_EXPORT)
238
239#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)
Combined button and popup list for selecting options.
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