qabstractsocket.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:7k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtNetwork module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QABSTRACTSOCKET_H
  38. #define QABSTRACTSOCKET_H
  39. #include <QtCore/qiodevice.h>
  40. #include <QtCore/qobject.h>
  41. #ifndef QT_NO_DEBUG_STREAM
  42. #include <QtCore/qdebug.h>
  43. #endif
  44. QT_BEGIN_HEADER
  45. QT_BEGIN_NAMESPACE
  46. QT_MODULE(Network)
  47. class QHostAddress;
  48. #ifndef QT_NO_NETWORKPROXY
  49. class QNetworkProxy;
  50. #endif
  51. class QAbstractSocketPrivate;
  52. class QAuthenticator;
  53. class Q_NETWORK_EXPORT QAbstractSocket : public QIODevice
  54. {
  55.     Q_OBJECT
  56. public:
  57.     enum SocketType {
  58.         TcpSocket,
  59.         UdpSocket,
  60.         UnknownSocketType = -1
  61.     };
  62.     enum NetworkLayerProtocol {
  63.         IPv4Protocol,
  64.         IPv6Protocol,
  65.         UnknownNetworkLayerProtocol = -1
  66.     };
  67.     enum SocketError {
  68.         ConnectionRefusedError,
  69.         RemoteHostClosedError,
  70.         HostNotFoundError,
  71.         SocketAccessError,
  72.         SocketResourceError,
  73.         SocketTimeoutError,
  74.         DatagramTooLargeError,
  75.         NetworkError,
  76.         AddressInUseError,
  77.         SocketAddressNotAvailableError,
  78.         UnsupportedSocketOperationError,
  79.         UnfinishedSocketOperationError,
  80.         ProxyAuthenticationRequiredError,
  81.         SslHandshakeFailedError,
  82.         UnknownSocketError = -1
  83.     };
  84.     enum SocketState {
  85.         UnconnectedState,
  86.         HostLookupState,
  87.         ConnectingState,
  88.         ConnectedState,
  89.         BoundState,
  90.         ListeningState,
  91.         ClosingState
  92. #ifdef QT3_SUPPORT
  93.         ,
  94.         Idle = UnconnectedState,
  95.         HostLookup = HostLookupState,
  96.         Connecting = ConnectingState,
  97.         Connected = ConnectedState,
  98.         Closing = ClosingState,
  99.         Connection = ConnectedState
  100. #endif
  101.     };
  102.     QAbstractSocket(SocketType socketType, QObject *parent);
  103.     virtual ~QAbstractSocket();
  104.     // ### Qt 5: Make connectToHost() and disconnectFromHost() virtual.
  105.     void connectToHost(const QString &hostName, quint16 port, OpenMode mode = ReadWrite);
  106.     void connectToHost(const QHostAddress &address, quint16 port, OpenMode mode = ReadWrite);
  107.     void disconnectFromHost();
  108.     bool isValid() const;
  109.     qint64 bytesAvailable() const;
  110.     qint64 bytesToWrite() const;
  111.     bool canReadLine() const;
  112.     quint16 localPort() const;
  113.     QHostAddress localAddress() const;
  114.     quint16 peerPort() const;
  115.     QHostAddress peerAddress() const;
  116.     QString peerName() const;
  117.     // ### Qt 5: Make setReadBufferSize() virtual
  118.     qint64 readBufferSize() const;
  119.     void setReadBufferSize(qint64 size);
  120.     void abort();
  121.     // ### Qt 5: Make socketDescriptor() and setSocketDescriptor() virtual.
  122.     int socketDescriptor() const;
  123.     bool setSocketDescriptor(int socketDescriptor, SocketState state = ConnectedState,
  124.                              OpenMode openMode = ReadWrite);
  125.     SocketType socketType() const;
  126.     SocketState state() const;
  127.     SocketError error() const;
  128.     // from QIODevice
  129.     void close();
  130.     bool isSequential() const;
  131.     bool atEnd() const;
  132.     bool flush();
  133.     // for synchronous access
  134.     // ### Qt 5: Make waitForConnected() and waitForDisconnected() virtual.
  135.     bool waitForConnected(int msecs = 30000);
  136.     bool waitForReadyRead(int msecs = 30000);
  137.     bool waitForBytesWritten(int msecs = 30000);
  138.     bool waitForDisconnected(int msecs = 30000);
  139. #ifndef QT_NO_NETWORKPROXY
  140.     void setProxy(const QNetworkProxy &networkProxy);
  141.     QNetworkProxy proxy() const;
  142. #endif
  143. Q_SIGNALS:
  144.     void hostFound();
  145.     void connected();
  146.     void disconnected();
  147.     void stateChanged(QAbstractSocket::SocketState);
  148.     void error(QAbstractSocket::SocketError);
  149. #ifndef QT_NO_NETWORKPROXY
  150.     void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
  151. #endif
  152. protected Q_SLOTS:
  153.     void connectToHostImplementation(const QString &hostName, quint16 port, OpenMode mode = ReadWrite);
  154.     void disconnectFromHostImplementation();
  155. protected:
  156.     qint64 readData(char *data, qint64 maxlen);
  157.     qint64 readLineData(char *data, qint64 maxlen);
  158.     qint64 writeData(const char *data, qint64 len);
  159.     void setSocketState(SocketState state);
  160.     void setSocketError(SocketError socketError);
  161.     void setLocalPort(quint16 port);
  162.     void setLocalAddress(const QHostAddress &address);
  163.     void setPeerPort(quint16 port);
  164.     void setPeerAddress(const QHostAddress &address);
  165.     void setPeerName(const QString &name);
  166.     QAbstractSocket(SocketType socketType, QAbstractSocketPrivate &dd, QObject *parent = 0);
  167. private:
  168.     Q_DECLARE_PRIVATE(QAbstractSocket)
  169.     Q_DISABLE_COPY(QAbstractSocket)
  170.     Q_PRIVATE_SLOT(d_func(), void _q_connectToNextAddress())
  171.     Q_PRIVATE_SLOT(d_func(), void _q_startConnecting(const QHostInfo &))
  172.     Q_PRIVATE_SLOT(d_func(), void _q_abortConnectionAttempt())
  173.     Q_PRIVATE_SLOT(d_func(), void _q_testConnection())
  174. #ifdef QT3_SUPPORT
  175. public:
  176.     enum Error {
  177.         ErrConnectionRefused = ConnectionRefusedError,
  178.         ErrHostNotFound = HostNotFoundError,
  179.         ErrSocketRead = UnknownSocketError
  180.     };
  181.     inline QT3_SUPPORT int socket() const { return socketDescriptor(); }
  182.     inline QT3_SUPPORT void setSocket(int socket) { setSocketDescriptor(socket); }
  183.     inline QT3_SUPPORT qulonglong waitForMore(int msecs, bool *timeout = 0) const
  184.     {
  185.         QAbstractSocket *that = const_cast<QAbstractSocket *>(this);
  186.         if (that->waitForReadyRead(msecs))
  187.             return qulonglong(bytesAvailable());
  188.         if (error() == SocketTimeoutError && timeout)
  189.             *timeout = true;
  190.         return 0;
  191.     }
  192.     typedef SocketState State;
  193. Q_SIGNALS:
  194.     QT_MOC_COMPAT void connectionClosed(); // same as disconnected()
  195.     QT_MOC_COMPAT void delayedCloseFinished(); // same as disconnected()
  196. #endif
  197. };
  198. #ifndef QT_NO_DEBUG_STREAM
  199. Q_NETWORK_EXPORT QDebug operator<<(QDebug, QAbstractSocket::SocketError);
  200. Q_NETWORK_EXPORT QDebug operator<<(QDebug, QAbstractSocket::SocketState);
  201. #endif
  202. QT_END_NAMESPACE
  203. QT_END_HEADER
  204. #endif // QABSTRACTSOCKET_H