qtcpserver.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/network/socket/qtcpserver.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6QTcpServerPrivate::QTcpServerPrivate()-
7 : port(0)-
8 , state(QAbstractSocket::UnconnectedState)-
9 , socketEngine(0)-
10 , serverSocketError(QAbstractSocket::UnknownSocketError)-
11 , maxConnections(30)-
12{-
13}-
14-
15-
16-
17QTcpServerPrivate::~QTcpServerPrivate()-
18{-
19}-
20-
21-
22-
23-
24-
25-
26QNetworkProxy QTcpServerPrivate::resolveProxy(const QHostAddress &address, quint16 port)-
27{-
28 if (address.isLoopback()
address.isLoopback()Description
TRUEevaluated 75 times by 11 tests
Evaluated by:
  • tst_QHostInfo
  • tst_QHttpNetworkConnection
  • tst_QNetworkReply
  • tst_QTcpServer
  • tst_QXmlInputSource
  • tst_qeventloop - unknown status
  • tst_qguieventloop - unknown status
  • tst_qobject - unknown status
  • tst_qsocketnotifier - unknown status
  • tst_qsslsocket - unknown status
  • tst_qtcpsocket - unknown status
FALSEevaluated 688 times by 11 tests
Evaluated by:
  • tst_NetworkSelfTest
  • tst_QFtp
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QTcpServer
  • tst_qhttpsocketengine - unknown status
  • tst_qimagereader - unknown status
  • tst_qsocks5socketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qtcpsocket - unknown status
  • tst_qxmlsimplereader - unknown status
)
75-688
29 return
executed 75 times by 11 tests: return QNetworkProxy::NoProxy;
Executed by:
  • tst_QHostInfo
  • tst_QHttpNetworkConnection
  • tst_QNetworkReply
  • tst_QTcpServer
  • tst_QXmlInputSource
  • tst_qeventloop - unknown status
  • tst_qguieventloop - unknown status
  • tst_qobject - unknown status
  • tst_qsocketnotifier - unknown status
  • tst_qsslsocket - unknown status
  • tst_qtcpsocket - unknown status
QNetworkProxy::NoProxy;
executed 75 times by 11 tests: return QNetworkProxy::NoProxy;
Executed by:
  • tst_QHostInfo
  • tst_QHttpNetworkConnection
  • tst_QNetworkReply
  • tst_QTcpServer
  • tst_QXmlInputSource
  • tst_qeventloop - unknown status
  • tst_qguieventloop - unknown status
  • tst_qobject - unknown status
  • tst_qsocketnotifier - unknown status
  • tst_qsslsocket - unknown status
  • tst_qtcpsocket - unknown status
75
30-
31 QList<QNetworkProxy> proxies;-
32 if (proxy.type() != QNetworkProxy::DefaultProxy
proxy.type() !...::DefaultProxyDescription
TRUEevaluated 10 times by 2 tests
Evaluated by:
  • tst_QTcpServer
  • tst_qtcpsocket - unknown status
FALSEevaluated 678 times by 11 tests
Evaluated by:
  • tst_NetworkSelfTest
  • tst_QFtp
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QTcpServer
  • tst_qhttpsocketengine - unknown status
  • tst_qimagereader - unknown status
  • tst_qsocks5socketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qtcpsocket - unknown status
  • tst_qxmlsimplereader - unknown status
) {
10-678
33-
34 proxies << proxy;-
35 }
executed 10 times by 2 tests: end of block
Executed by:
  • tst_QTcpServer
  • tst_qtcpsocket - unknown status
else {
10
36-
37 QNetworkProxyQuery query(port, QString(), QNetworkProxyQuery::TcpServer);-
38 proxies = QNetworkProxyFactory::proxyForQuery(query);-
39 }
executed 678 times by 11 tests: end of block
Executed by:
  • tst_NetworkSelfTest
  • tst_QFtp
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QTcpServer
  • tst_qhttpsocketengine - unknown status
  • tst_qimagereader - unknown status
  • tst_qsocks5socketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qtcpsocket - unknown status
  • tst_qxmlsimplereader - unknown status
678
40-
41-
42 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(proxies)>::type> _container_((proxies)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (const QNetworkProxy &p = *_container_.i; _container_.control; _container_.control = 0): qAsConst(proxies)) {-
43 if (p.capabilities() & QNetworkProxy::ListeningCapability
p.capabilities...ningCapabilityDescription
TRUEevaluated 682 times by 11 tests
Evaluated by:
  • tst_NetworkSelfTest
  • tst_QFtp
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QTcpServer
  • tst_qhttpsocketengine - unknown status
  • tst_qimagereader - unknown status
  • tst_qsocks5socketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qtcpsocket - unknown status
  • tst_qxmlsimplereader - unknown status
FALSEevaluated 10 times by 1 test
Evaluated by:
  • tst_QTcpServer
)
10-682
44 return
executed 682 times by 11 tests: return p;
Executed by:
  • tst_NetworkSelfTest
  • tst_QFtp
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QTcpServer
  • tst_qhttpsocketengine - unknown status
  • tst_qimagereader - unknown status
  • tst_qsocks5socketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qtcpsocket - unknown status
  • tst_qxmlsimplereader - unknown status
p;
executed 682 times by 11 tests: return p;
Executed by:
  • tst_NetworkSelfTest
  • tst_QFtp
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QTcpServer
  • tst_qhttpsocketengine - unknown status
  • tst_qimagereader - unknown status
  • tst_qsocks5socketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qtcpsocket - unknown status
  • tst_qxmlsimplereader - unknown status
682
45 }
executed 10 times by 1 test: end of block
Executed by:
  • tst_QTcpServer
10
46-
47-
48-
49 return
executed 6 times by 1 test: return QNetworkProxy(QNetworkProxy::DefaultProxy);
Executed by:
  • tst_QTcpServer
QNetworkProxy(QNetworkProxy::DefaultProxy);
executed 6 times by 1 test: return QNetworkProxy(QNetworkProxy::DefaultProxy);
Executed by:
  • tst_QTcpServer
6
50}-
51-
52-
53-
54-
55void QTcpServerPrivate::configureCreatedSocket()-
56{-
57 socketEngine->setOption(QAbstractSocketEngine::AddressReusable, 1);-
58-
59}-
60-
61-
62-
63void QTcpServerPrivate::readNotification()-
64{-
65 QTcpServer * const q = q_func();-
66 for (;;) {-
67 if (pendingConnections.count() >= maxConnections) {-
68-
69-
70-
71 if (socketEngine->isReadNotificationEnabled())-
72 socketEngine->setReadNotificationEnabled(false);-
73 return;-
74 }-
75-
76 int descriptor = socketEngine->accept();-
77 if (descriptor == -1) {-
78 if (socketEngine->error() != QAbstractSocket::TemporaryError) {-
79 q->pauseAccepting();-
80 serverSocketError = socketEngine->error();-
81 serverSocketErrorString = socketEngine->errorString();-
82 q->acceptError(serverSocketError);-
83 }-
84 break;-
85 }-
86-
87-
88-
89 q->incomingConnection(descriptor);-
90-
91 QPointer<QTcpServer> that = q;-
92 q->newConnection();-
93 if (!that || !q->isListening())-
94 return;-
95 }-
96}-
97QTcpServer::QTcpServer(QObject *parent)-
98 : QObject(*new QTcpServerPrivate, parent)-
99{-
100-
101-
102-
103}-
104QTcpServer::~QTcpServer()-
105{-
106-
107-
108-
109 close();-
110}-
111-
112-
113-
114QTcpServer::QTcpServer(QTcpServerPrivate &dd, QObject *parent)-
115 : QObject(dd, parent)-
116{-
117-
118-
119-
120}-
121bool QTcpServer::listen(const QHostAddress &address, quint16 port)-
122{-
123 QTcpServerPrivate * const d = d_func();-
124 if (d->state == QAbstractSocket::ListeningState) {-
125 QMessageLogger(__FILE__, 271277, __PRETTY_FUNCTION__).warning("QTcpServer::listen() called when already listening");-
126 return false;-
127 }-
128-
129 QAbstractSocket::NetworkLayerProtocol proto = address.protocol();-
130 QHostAddress addr = address;-
131-
132-
133-
134-
135 QNetworkProxy proxy = d->resolveProxy(addr, port);-
136-
137-
138 delete d->socketEngine;-
139 d->socketEngine = QAbstractSocketEngine::createSocketEngine(QAbstractSocket::TcpSocket, proxy, this);-
140 if (!d->socketEngine) {-
141 d->serverSocketError = QAbstractSocket::UnsupportedSocketOperationError;-
142 d->serverSocketErrorString = tr("Operation on socket is not supported");-
143 return false;-
144 }-
145-
146-
147 d->socketEngine->setProperty("_q_networksession", property("_q_networksession"));-
148-
149 if (!d->socketEngine->initialize(QAbstractSocket::TcpSocket, proto)) {-
150 d->serverSocketError = d->socketEngine->error();-
151 d->serverSocketErrorString = d->socketEngine->errorString();-
152 return false;-
153 }-
154 proto = d->socketEngine->protocol();-
155 if (addr.protocol() == QAbstractSocket::AnyIPProtocol && proto == QAbstractSocket::IPv4Protocol)-
156 addr = QHostAddress::AnyIPv4;-
157-
158 d->configureCreatedSocket();-
159-
160 if (!d->socketEngine->bind(addr, port)) {-
161 d->serverSocketError = d->socketEngine->error();-
162 d->serverSocketErrorString = d->socketEngine->errorString();-
163 return false;-
164 }-
165-
166 if (!d->socketEngine->listen()) {-
167 d->serverSocketError = d->socketEngine->error();-
168 d->serverSocketErrorString = d->socketEngine->errorString();-
169 return false;-
170 }-
171-
172 d->socketEngine->setReceiver(d);-
173 d->socketEngine->setReadNotificationEnabled(true);-
174-
175 d->state = QAbstractSocket::ListeningState;-
176 d->address = d->socketEngine->localAddress();-
177 d->port = d->socketEngine->localPort();-
178-
179-
180-
181-
182-
183 return true;-
184}-
185-
186-
187-
188-
189-
190-
191-
192bool QTcpServer::isListening() const-
193{-
194 const QTcpServerPrivate * const d = d_func();-
195 do { if (!d->socketEngine) { return false; } } while (0);-
196 return d->socketEngine->state() == QAbstractSocket::ListeningState;-
197}-
198-
199-
200-
201-
202-
203-
204-
205void QTcpServer::close()-
206{-
207 QTcpServerPrivate * const d = d_func();-
208-
209 qDeleteAll(d->pendingConnections);-
210 d->pendingConnections.clear();-
211-
212 if (d->socketEngine) {-
213 d->socketEngine->close();-
214 if (true) {-
215 d->socketEngine->deleteLater();-
216 } else {
dead code: { }
-
217-
218-
219 }
dead code: { }
-
220 d->socketEngine = 0;-
221 }-
222-
223 d->state = QAbstractSocket::UnconnectedState;-
224}-
225qintptr QTcpServer::socketDescriptor() const-
226{-
227 const QTcpServerPrivate * const d = d_func();-
228 do { if (!d->socketEngine) { return -1; } } while (0);-
229 return d->socketEngine->socketDescriptor();-
230}-
231bool QTcpServer::setSocketDescriptor(qintptr socketDescriptor)-
232{-
233 QTcpServerPrivate * const d = d_func();-
234 if (isListening()) {-
235 QMessageLogger(__FILE__, 401407, __PRETTY_FUNCTION__).warning("QTcpServer::setSocketDescriptor() called when already listening");-
236 return false;-
237 }-
238-
239 if (d->socketEngine)-
240 delete d->socketEngine;-
241 d->socketEngine = QAbstractSocketEngine::createSocketEngine(socketDescriptor, this);-
242 if (!d->socketEngine) {-
243 d->serverSocketError = QAbstractSocket::UnsupportedSocketOperationError;-
244 d->serverSocketErrorString = tr("Operation on socket is not supported");-
245 return false;-
246 }-
247-
248-
249 d->socketEngine->setProperty("_q_networksession", property("_q_networksession"));-
250-
251 if (!d->socketEngine->initialize(socketDescriptor, QAbstractSocket::ListeningState)) {-
252 d->serverSocketError = d->socketEngine->error();-
253 d->serverSocketErrorString = d->socketEngine->errorString();-
254-
255-
256-
257-
258 return false;-
259 }-
260-
261 d->socketEngine->setReceiver(d);-
262 d->socketEngine->setReadNotificationEnabled(true);-
263-
264 d->state = d->socketEngine->state();-
265 d->address = d->socketEngine->localAddress();-
266 d->port = d->socketEngine->localPort();-
267-
268-
269-
270-
271 return true;-
272}-
273-
274-
275-
276-
277-
278-
279-
280quint16 QTcpServer::serverPort() const-
281{-
282 const QTcpServerPrivate * const d = d_func();-
283 do { if (!d->socketEngine) { return 0; } } while (0);-
284 return d->socketEngine->localPort();-
285}-
286-
287-
288-
289-
290-
291-
292-
293QHostAddress QTcpServer::serverAddress() const-
294{-
295 const QTcpServerPrivate * const d = d_func();-
296 do { if (!d->socketEngine) { return QHostAddress(QHostAddress::Null); } } while (0);-
297 return d->socketEngine->localAddress();-
298}-
299bool QTcpServer::waitForNewConnection(int msec, bool *timedOut)-
300{-
301 QTcpServerPrivate * const d = d_func();-
302 if (d->state != QAbstractSocket::ListeningState)-
303 return false;-
304-
305 if (!d->socketEngine->waitForRead(msec, timedOut)) {-
306 d->serverSocketError = d->socketEngine->error();-
307 d->serverSocketErrorString = d->socketEngine->errorString();-
308 return false;-
309 }-
310-
311 if (timedOut && *timedOut)-
312 return false;-
313-
314 d->readNotification();-
315-
316 return true;-
317}-
318-
319-
320-
321-
322-
323-
324-
325bool QTcpServer::hasPendingConnections() const-
326{-
327 return !d_func()->pendingConnections.isEmpty();-
328}-
329QTcpSocket *QTcpServer::nextPendingConnection()-
330{-
331 QTcpServerPrivate * const d = d_func();-
332 if (d->pendingConnections.isEmpty())-
333 return 0;-
334-
335 if (!d->socketEngine->isReadNotificationEnabled())-
336 d->socketEngine->setReadNotificationEnabled(true);-
337-
338 return d->pendingConnections.takeFirst();-
339}-
340void QTcpServer::incomingConnection(qintptr socketDescriptor)-
341{-
342-
343-
344-
345-
346 QTcpSocket *socket = new QTcpSocket(this);-
347 socket->setSocketDescriptor(socketDescriptor);-
348 addPendingConnection(socket);-
349}-
350void QTcpServer::addPendingConnection(QTcpSocket* socket)-
351{-
352 d_func()->pendingConnections.append(socket);-
353}-
354void QTcpServer::setMaxPendingConnections(int numConnections)-
355{-
356 d_func()->maxConnections = numConnections;-
357}-
358-
359-
360-
361-
362-
363-
364-
365int QTcpServer::maxPendingConnections() const-
366{-
367 return d_func()->maxConnections;-
368}-
369-
370-
371-
372-
373-
374-
375QAbstractSocket::SocketError QTcpServer::serverError() const-
376{-
377 return d_func()->serverSocketError;-
378}-
379-
380-
381-
382-
383-
384-
385-
386QString QTcpServer::errorString() const-
387{-
388 return d_func()->serverSocketErrorString;-
389}-
390void QTcpServer::pauseAccepting()-
391{-
392 d_func()->socketEngine->setReadNotificationEnabled(false);-
393}-
394void QTcpServer::resumeAccepting()-
395{-
396 d_func()->socketEngine->setReadNotificationEnabled(true);-
397}-
398void QTcpServer::setProxy(const QNetworkProxy &networkProxy)-
399{-
400 QTcpServerPrivate * const d = d_func();-
401 d->proxy = networkProxy;-
402}-
403QNetworkProxy QTcpServer::proxy() const-
404{-
405 const QTcpServerPrivate * const d = d_func();-
406 return d->proxy;-
407}-
408-
409-
410-
411-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9