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

📄 socket.php

📁 This is the script which used on 10minutemail.com for temporary email.
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php//// +----------------------------------------------------------------------+// | PHP Version 4                                                        |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2003 The PHP Group                                |// +----------------------------------------------------------------------+// | This source file is subject to version 2.0 of the PHP license,       |// | that is bundled with this package in the file LICENSE, and is        |// | available at through the world-wide-web at                           |// | http://www.php.net/license/2_02.txt.                                 |// | If you did not receive a copy of the PHP license and are unable to   |// | obtain it through the world-wide-web, please send a note to          |// | license@php.net so we can mail you a copy immediately.               |// +----------------------------------------------------------------------+// | Authors: Stig Bakken <ssb@php.net>                                   |// |          Chuck Hagenbuch <chuck@horde.org>                           |// +----------------------------------------------------------------------+//// $Id: Socket.php,v 1.31 2007/05/04 04:30:29 chagenbu Exp $require_once 'PEAR.php';define('NET_SOCKET_READ',  1);define('NET_SOCKET_WRITE', 2);define('NET_SOCKET_ERROR', 4);/** * Generalized Socket class. * * @version 1.1 * @author Stig Bakken <ssb@php.net> * @author Chuck Hagenbuch <chuck@horde.org> */class Net_Socket extends PEAR {    /**     * Socket file pointer.     * @var resource $fp     */    var $fp = null;    /**     * Whether the socket is blocking. Defaults to true.     * @var boolean $blocking     */    var $blocking = true;    /**     * Whether the socket is persistent. Defaults to false.     * @var boolean $persistent     */    var $persistent = false;    /**     * The IP address to connect to.     * @var string $addr     */    var $addr = '';    /**     * The port number to connect to.     * @var integer $port     */    var $port = 0;    /**     * Number of seconds to wait on socket connections before assuming     * there's no more data. Defaults to no timeout.     * @var integer $timeout     */    var $timeout = false;    /**     * Number of bytes to read at a time in readLine() and     * readAll(). Defaults to 2048.     * @var integer $lineLength     */    var $lineLength = 2048;    /**     * Connect to the specified port. If called when the socket is     * already connected, it disconnects and connects again.     *     * @param string  $addr        IP address or host name.     * @param integer $port        TCP port number.     * @param boolean $persistent  (optional) Whether the connection is     *                             persistent (kept open between requests     *                             by the web server).     * @param integer $timeout     (optional) How long to wait for data.     * @param array   $options     See options for stream_context_create.     *     * @access public     *     * @return boolean | PEAR_Error  True on success or a PEAR_Error on failure.     */    function connect($addr, $port = 0, $persistent = null, $timeout = null, $options = null)    {        if (is_resource($this->fp)) {            @fclose($this->fp);            $this->fp = null;        }        if (!$addr) {            return $this->raiseError('$addr cannot be empty');        } elseif (strspn($addr, '.0123456789') == strlen($addr) ||                  strstr($addr, '/') !== false) {            $this->addr = $addr;        } else {            $this->addr = @gethostbyname($addr);        }        $this->port = $port % 65536;        if ($persistent !== null) {            $this->persistent = $persistent;        }        if ($timeout !== null) {            $this->timeout = $timeout;        }        $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';        $errno = 0;        $errstr = '';        if ($options && function_exists('stream_context_create')) {            if ($this->timeout) {                $timeout = $this->timeout;            } else {                $timeout = 0;            }            $context = stream_context_create($options);            $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout, $context);        } else {            if ($this->timeout) {                $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $this->timeout);            } else {                $fp = @$openfunc($this->addr, $this->port, $errno, $errstr);            }        }        if (!$fp) {            return $this->raiseError($errstr, $errno);        }        $this->fp = $fp;        return $this->setBlocking($this->blocking);    }    /**     * Disconnects from the peer, closes the socket.     *     * @access public     * @return mixed true on success or an error object otherwise     */    function disconnect()    {        if (!is_resource($this->fp)) {            return $this->raiseError('not connected');        }        @fclose($this->fp);        $this->fp = null;        return true;    }    /**     * Find out if the socket is in blocking mode.     *     * @access public     * @return boolean  The current blocking mode.     */    function isBlocking()    {        return $this->blocking;    }    /**     * Sets whether the socket connection should be blocking or     * not. A read call to a non-blocking socket will return immediately     * if there is no data available, whereas it will block until there     * is data for blocking sockets.     *     * @param boolean $mode  True for blocking sockets, false for nonblocking.     * @access public     * @return mixed true on success or an error object otherwise     */    function setBlocking($mode)    {        if (!is_resource($this->fp)) {            return $this->raiseError('not connected');        }        $this->blocking = $mode;        socket_set_blocking($this->fp, $this->blocking);        return true;    }    /**     * Sets the timeout value on socket descriptor,     * expressed in the sum of seconds and microseconds     *     * @param integer $seconds  Seconds.     * @param integer $microseconds  Microseconds.     * @access public     * @return mixed true on success or an error object otherwise     */    function setTimeout($seconds, $microseconds)    {        if (!is_resource($this->fp)) {            return $this->raiseError('not connected');        }        return socket_set_timeout($this->fp, $seconds, $microseconds);    }    /**     * Sets the file buffering size on the stream.     * See php's stream_set_write_buffer for more information.     *     * @param integer $size     Write buffer size.     * @access public     * @return mixed on success or an PEAR_Error object otherwise     */    function setWriteBuffer($size)    {        if (!is_resource($this->fp)) {            return $this->raiseError('not connected');        }        $returned = stream_set_write_buffer($this->fp, $code);        if ($returned == 0) {            return true;        }        return $this->raiseError('Cannot set write buffer.');    }    /**     * Returns information about an existing socket resource.     * Currently returns four entries in the result array:     *     * <p>     * timed_out (bool) - The socket timed out waiting for data<br>     * blocked (bool) - The socket was blocked<br>     * eof (bool) - Indicates EOF event<br>     * unread_bytes (int) - Number of bytes left in the socket buffer<br>     * </p>     *     * @access public     * @return mixed Array containing information about existing socket resource or an error object otherwise     */    function getStatus()    {        if (!is_resource($this->fp)) {            return $this->raiseError('not connected');        }        return socket_get_status($this->fp);    }    /**     * Get a specified line of data     *     * @access public     * @return $size bytes of data from the socket, or a PEAR_Error if     *         not connected.     */    function gets($size)    {        if (!is_resource($this->fp)) {            return $this->raiseError('not connected');        }        return @fgets($this->fp, $size);    }    /**     * Read a specified amount of data. This is guaranteed to return,     * and has the added benefit of getting everything in one fread()     * chunk; if you know the size of the data you're getting     * beforehand, this is definitely the way to go.     *     * @param integer $size  The number of bytes to read from the socket.     * @access public     * @return $size bytes of data from the socket, or a PEAR_Error if     *         not connected.     */    function read($size)

⌨️ 快捷键说明

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