⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ksock.h

📁 将konqueror浏览器移植到ARM9 2410中
💻 H
字号:
/* *  This file is part of the KDE libraries *  Copyright (C) 1997 Torben Weis (weis@kde.org) * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Library General Public *  License as published by the Free Software Foundation; either *  version 2 of the License, or (at your option) any later version. * *  This library is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *  Library General Public License for more details. * *  You should have received a copy of the GNU Library General Public License *  along with this library; see the file COPYING.LIB.  If not, write to *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330, *  Boston, MA 02111-1307, USA. */#ifndef KSOCK_H#define KSOCK_H#include <qobject.h>#include <sys/types.h>// we define STRICT_ANSI to get rid of some warnings in glibc#ifndef __STRICT_ANSI__#define __STRICT_ANSI__#define _WE_DEFINED_IT_#endif#include <sys/socket.h>#ifdef _WE_DEFINED_IT_#undef __STRICT_ANSI__#undef _WE_DEFINED_IT_#endif#include <sys/un.h>#include <netinet/in.h>class QSocketNotifier;// This is here for compatibility with old applications still using the constants// Never use them in new programstypedef sockaddr_in ksockaddr_in;#define KSOCK_DEFAULT_DOMAIN PF_INETclass KSocketPrivate;class KServerSocketPrivate;/**  * A TCP/IP client socket. * * You can connect this socket to any Internet address.  * * The socket gives you three signals: When ready for reading,  * ready for writing or if the connection is broken.   * Using @ref socket() you get a file descriptor * which you can use with the usual UNIX function like @ref write(..) or *  @ref read(...).  * If you have already such a socket identifier you can construct a KSocket * on this identifier.  *   * If @ref socket() delivers a value of -1 or less, the connection  * was not successful. * * @author Torben Weis <weis@uni-frankfurt.de> * @version $Id: ksock.h,v 1.45 2001/03/23 01:48:31 thiago Exp $ * @short a TCP/IP client socket. */class KSocket : public QObject{    Q_OBJECTpublic:    /**      * Create a KSocket with the provided file descriptor.     * @param _sock	The file descriptor to use.     */    KSocket( int _sock );        /**      * Create a socket and connect to a host.     * @param _host	The remote host to which to connect.     * @param _port	The port on the remote host.     * @param timeOut	The number of seconds waiting for connect (default 30).     */    KSocket( const char *_host, unsigned short int _port, int timeOut = 30);        /**      * Connects to a UNIX domain socket.     * @param _path    The filename of the socket.     */    KSocket( const char * _path );    /**      * Destructor. Closes the socket if it is still open.     */    virtual ~KSocket();    // BCI: remove in libkdecore.so.4    /**      *  A small wrapper around @ref gethostbyname() and such.      *  Don't use this in new programs. Use @ref KExtendedSocket::lookup      *  @deprecated      */    static bool initSockaddr(ksockaddr_in *server_name, const char *hostname, unsigned short int port, int domain = PF_INET);        /**      * Returns a file descriptor for this socket.     * Returns -1 when an error occured.     */    int socket() const { return sock; }        /**      * Enable the socket for reading.     *     * If you enable read mode, the socket will emit the signal     * @ref readEvent() whenever there is something to read out of this     * socket.     */    void enableRead( bool );        /**      * Enable the socket for writing.     *     * If you enable write mode, the socket will emit the signal     * @ref writeEvent() whenever the socket is ready for writing.     *     * Warning: If you forget to call enableWrite(false) when you are     * not ready to send data, you will get lots of writeEvent() signals,     * in the order of thousands a second !     */    void enableWrite( bool );        // BCI: remove in libkdecore.so.4    /**     * Return address.     * This function is dumb. Don't ever use it     * if you need the peer address of this socket, use @ref KExtendedSocket::peerAddress(int)     * instead     * @deprecated     */    unsigned long ipv4_addr();    signals:    /**      * Data has arrived for reading.     *     * This signal will only be raised if @ref enableRead( @p true ) was called     * first.     */    void readEvent( KSocket * );        /**      * Socket is ready for writing.     *     * This signal will only be raised if @ref enableWrite( @p true ) was      * called first.     *     * Warning: If you forget to call enableWrite(false) when you are     * not ready to send data, you will get lots of writeEvent() signals,     * in the order of thousands a second !     */    void writeEvent( KSocket * );        /**      * Raised when the connection is broken.     */    void closeEvent( KSocket * );    public slots:    /**      * Connected to the writeNotifier.     *     * Called when     *  the socket is ready for writing.     */    void slotWrite( int );        /**      * Connected to the readNotifier.     *     * Called when     *  the socket is ready for reading.     */    void slotRead( int );    protected:    bool connect( const QString& _host, unsigned short int _port );    bool connect( const char *_path );      bool init_sockaddr( const QString& hostname, unsigned short int port );    // BCI: remove in libkdecore.so.4    /* These are only here because I can't remove them */    ksockaddr_in server_name;    struct sockaddr_un unix_addr;    /******************************************************     * The file descriptor for this socket. sock may be -1.     * This indicates that it is not connected.     */    int sock;    int domain;      QSocketNotifier *readNotifier;    QSocketNotifier *writeNotifier;private:    int timeOut;        KSocket(const KSocket&);    KSocket& operator=(const KSocket&);    KSocketPrivate *d;    };/** * Monitor a port for incoming TCP/IP connections. * * You can use a KServerSocket to listen on a port for incoming * connections. When a connection arrived in the port, a KSocket * is created and the signal accepted is raised. Make sure you * always connect to this signal. If you dont the ServerSocket will * create new KSocket's and no one will delete them! * * If socket() is -1 or less the socket was not created properly. * * @author Torben Weis <weis@stud.uni-frankfurt.de> * @version $Id: ksock.h,v 1.45 2001/03/23 01:48:31 thiago Exp $ * @short Monitor a port for incoming TCP/IP connections.*/class KServerSocket : public QObject{    Q_OBJECTpublic:    /**     * Constructor.     * @param _port	the port number to monitor for incoming connections.     * @param _bind     if false you need to call @ref bindAndListen yourself.     *                  This gives you the opportunity to set options on the     *                  socket.     */    KServerSocket( unsigned short int _port, bool _bind );    /**     * @deprecated     * Same as above with _bind true.     */    KServerSocket( unsigned short int _port );    /**     * Creates a UNIX domain server socket.     * @param _path     path used for the socket.     * @param _bind     if false you need to call @ref bindAndListen yourself.     *                  This gives you the opportunity to set options on the     *                  socket.     */    KServerSocket( const char *_path, bool _bind );    /**     * @deprecated     * Same as above with _bind true.     */    KServerSocket( const char *_path );      /**      * Destructor. Closes the socket if it was not already closed.     */    virtual ~KServerSocket();    /**     * Bind the socket and start listening. This should only be called     * once when the constructor was called with _bind false.     * @return true on success. false on error.     * On error the socket will be closed.     */    bool bindAndListen();        /**      * Get the file descriptor associated with the socket.     * Returns -1 when an error occured during construction or     * @ref bindAndListen     */    int socket() const { return sock; }    /**      * Returns the port number which is being monitored.     */    unsigned short int port();    // BCI: remove in libkdecore.so.4    /**      * The address.     * This is dumb. Don't use it     * Refer to @ref KExtendedSocket::localAddress(int)     * @deprecated     */    unsigned long ipv4_addr();public slots:     /**      * Called when someone connected to our port.     */    virtual void slotAccept( int ); // why is this virtual?signals:    /**     * A connection has been accepted.     * It is your task to delete the KSocket if it is no longer needed.     */    void accepted( KSocket* );protected:    bool init( short unsigned int );    bool init( const char *_path );      /**      * Notifies us when there is something to read on the port.     */    QSocketNotifier *notifier;        /**      * The file descriptor for this socket. sock may be -1.     * This indicates that it is not connected.     */        int sock;      int domain;private:    KServerSocket(const KServerSocket&);    KServerSocket& operator=(const KServerSocket&);    KServerSocketPrivate *d;};// Here are a whole bunch of hackish macros that allow one to// get at the correct member of ksockaddr_in// But since ksockaddr_in is IPv4-only, and deprecated...#define get_sin_addr(x) x.sin_addr#define get_sin_port(x) x.sin_port#define get_sin_family(x) x.sin_family#define get_sin_paddr(x) x->sin_addr#define get_sin_pport(x) x->sin_port#define get_sin_pfamily(x) x->sin_family#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -