php socket常用函数

 socket常用函数

<?php
echo 'php socket相关函数:<br/>';
$str = <<<EOF
<p>1、<b>socket_create():</b>创建并返回一个套接字。<br/>\n</p>
<p><b>常用:</b></p>
<p>socket_create(int \$domain, int \$type, int \$protocol); <br/>\n</p>
<p><b>参数:</b></br>\n</p>
<p>1)、domain:参数指定哪个协议用在当前套接字上。<br/>\n</p>
<p>AF_INET:IPv4 网络协议。TCP 和 UDP 都可使用此协议。<br/>\n</p>
<p>AF_INET6:IPv6 网络协议。TCP 和 UDP 都可使用此协议。<br/>\n</p>
<p>AF_UNIX:本地通讯协议。具有高性能和低成本的 IPC(进程间通讯)。<br/>\n</p>
<p>2)、type:用于选择套接字使用的类型。<br/>\n</p>
<p>SOCK_STREAM:提供一个顺序化的、可靠的、全双工的、基于连接的字节流。支持数据传送流量控制机制。TCP 协议即基于这种流式套接字。<br/>\n</p>
<p>SOCK_DGRAM:提供数据报文的支持。(无连接,不可靠、固定最大长度).UDP协议即基于这种数据报文套接字。<br/>\n</p>
<p>SOCK_SEQPACKET:提供一个顺序化的、可靠的、全双工的、面向连接的、固定最大长度的数据通信;数据端通过接收每一个数据段来读取整个数据包。<br/>\n</p>
<p>SOCK_RAW:提供读取原始的网络协议。这种特殊的套接字可用于手工构建任意类型的协议。一般使用这个套接字来实现 ICMP 请求(例如 ping)。<br/>\n</p>
<p>SOCK_RDM:提供一个可靠的数据层,但不保证到达顺序。一般的操作系统都未实现此功能。<br/>\n</p>
<p>3)、protocol 参数,是设置指定 domain 套接字下的具体协议。这个值可以使用 getprotobyname() 函数进行读取。如果所需的协议是 TCP 或 UDP,可以直接使用常量 SOL_TCP 和 SOL_UDP 。 <br/>\n</p>
<p>icmp:Internet Control Message Protocol 主要用于网关和主机报告错误的数据通信。例如“ping”命令(在目前大部分的操作系统中)就是使用 ICMP 协议实现的。<br/>\n</p>
<p>udp:User Datagram Protocol 是一个无连接的、不可靠的、具有固定最大长度的报文协议。由于这些特性,UDP 协议拥有最小的协议开销。<br/>\n</p>
<p>tcp:Transmission Control Protocol 是一个可靠的、基于连接的、面向数据流的全双工协议。TCP 能够保障所有的数据包是按照其发送顺序而接收的。如果任意数据包在通讯时丢失,TCP 将自动重发数据包直到目标主机应答已接收。因为可靠性和性能的原因,TCP 在数据传输层使用 8bit 字节边界。因此,TCP 应用程序必须允许传送部分报文的可能。 <br/>\n</p>
<p><b>返回值:</b><br/>\n</p>
<p>socket_create() 正确时返回一个套接字,失败时返回 FALSE。要读取错误代码,可以调用 socket_last_error()。这个错误代码可以通过 socket_strerror() 读取文字的错误说明。<br/>\n</p>
<p><b>错误/异常:</b><br/>\n</p>
<p>如果使用一个无效的 domain 或 type,socket_create() 会使用 AF_INET 和 SOCK_STREAM 替代无效参数,同时会发出 E_WARNING 警告信息。<br/>\n</p>

<p>2、<b>socket_accept():</b>接受一个Socket连接.<br/>\n</p>
<p><b>参数</b><br/>\n</p>
<p>socket:socket_create()创建的套接字。<br/>\n</p>
<p><b>返回值</b><br>\n</p>
<p>成功:返回新的连接;失败:返回错误信息。<br/>\n</p>
<p>3、<b>socket_bind():</b>给套接字绑定名字。<br/>\n</p>
<p><b>说明:</b>bool socket_bind ( resource \$socket , string \$address [, int \$port = 0 ]  )<br/>\n</p>
<p>绑定 address 到 socket。 该操作必须是在使用 socket_connect() 或者 socket_listen() 建立一个连接之前。<br/>\n</p>
<p><b>参数:</b><br/>\n</p>
<p>socket:用 socket_create() 创建的一个有效的套接字资源。<br/>\n</p>
<p>address:如果套接字是 AF_INET 族,那么 address 必须是一个四点分法的 IP 地址(例如 127.0.0.1 )。<br/>\n</p>
<p>    如果套接字是 AF_UNIX 族,那么 address 是 Unix 套接字一部分(例如 /tmp/my.sock )。<br/>\n</p>
<p>port (可选):参数 port 仅仅用于 AF_INET 套接字连接的时候,并且指定连接中需要监听的端口号。<br/>\n</p>
<p><b>返回值:</b><br/>\n</p>
<p> 成功时返回 TRUE, 或者在失败时返回 FALSE。错误代码会传入 socket_last_error() ,如果将此参数传入 socket_strerror() 则可以得到错误的文字说明。<br/>\n</p> 
<p>4、<b>socket_listen():</b>监听由指定socket的所有连接<br/>\n</p>
<p><b>说明:</b>bool socket_listen ( resource \$socket [, int \$backlog = 0 ]  )<br/>\n</p>
<p><b>参数</b><br/>\n</p>
<p>socket:由socket_create()或者socket_addrinfo_bind()创建的套接字。<br/>\n</p>
<p>backlog:返回的日志进入队列等待处理。如果请求到达队列时,队列已满,则客户端可能会收到带有ECONNREFUSED指示的错误,或者,如果底层协议支持重传,则该请求可能被忽略,以便重试可能成功。<br/>\n</p>
<p><b>返回值</b><br/>\n</p>
<p>成功时返回 TRUE, 或者在失败时返回 FALSE。</p>
<p>5、<b>socket_addrinfo_bind():</b>根据ip创建绑定一个套接字<br/>\n</p>
<p><b>说明:</b>resource socket_addrinfo_bind ( resource \$addr  )<br/>\n</p>
<p><b>参数</b><br/>\n</p>
<p>addr:socket_addrinfo_lookup()创建的数据源</p>
<p><b>返回值</b><br/>\n</p>
<p>成功返回一个套接字,失败返回空。</p>
<p>6、<b>socket_addrinfo_lookup():</b>根据getaddrinfo获取给定主机的相关数组</p>
<p><b>说明:</b>array socket_addrinfo_lookup ( string \$host [, string \$service [, array \$hints ]]  )</p>
<p>查找不同的连接主机的方式。返回作为socekt_addringo_bind()的源数组</p>
<p><b>参数</b></p>
<p>host:查找主机名。</p>
<p>service:要连接的服务。如果是服务名称,则将其转换成对应的端口号。</p>
<p>hints:提示提供了选择返回地址的标准。您可以指定由getadrinfo定义的提示。</p>
<p><b>返回值</b></p>
<p>返回可与其他Socket_addrinfo函数一起使用的AddrInfo资源句柄数组。</p>
<p>7、<b>socket_addrinfo_connect():</b>从给定的addrinfo创建并连接到套接字</p>
<p><b>说明:</b>resource socket_addrinfo_connect ( resource \$addr  )</p>
<p>根据AddrInfo资源创建并连接套接字。此函数的返回值可与套接字函数的其余部分一起使用。</p>
<p><b>参数</b></p>
<p>addr:socket_addrinfo_lookup()返回的资源。</p>
<p><b>返回值</b></p>
<p>成功返回一个套接字,失败返回空。</p>
<p>8、<b>socket_addrinfo_explain():</b>获取有关addrinfo的信息</p>
<p><b>说明:</b>array socket_addrinfo_explain ( resource \$addr  )</p>
<p>addrinfo的基础结构。</p>
<p><b>参数</b></p>
<p>addr:socket_addrinfo_lookup()所创建的资源。</p>
<p><b>返回值</b></p>
<p>返回包含addrinfo结构中的字段的数组。</p>
<p>9、<b>socket_close():</b>关闭套接字资源</p>
<p><b>说明:</b>void socket_close ( resource \$socket  )</p>
<p>socket_close() 会关闭掉给定的 socket 资源。 这个函数只针对套接字资源有效,不能用在其他类型的资源类型上。</p>
<p><b>参数</b></p>
<p>socket:由 socket_create() 或者是 socket_accept() 创建的有效的套接字资源。</p>
<p><b>返回值</b></p>
<p>没有返回值。</p>
<p>10、<b>socket_clear_error():</b>清除套接字或者最后的错误代码上的错误</p>
<p><b>说明:</b>void socket_clear_error ([ resource \$socket  ] )</p>
<p>这个函数清除给定的套接字上的错误代码或是最后一个全局的套接字如果套接字没有指定的话</p>
<p>这个函数允许明确的重置错误代码值 不论是一个套接字或者最后全局错误代码的扩展, 这对在检测应用的一部分是否有错误发生是十分有用的 。</p>
<p><b>参数</b></p>
<p>socket:用socket_create()创建的有效的套接字资源。</p>
<p><b>返回值</b></p>
<p>没有返回值</p>
<p>11、<b>socket_cmsg_space():</b>计算消息缓冲区大小</p>
<p><b>说明:</b>int socket_cmsg_space ( int \$level , int \$type [, int \$n = 0 ]  )</p>
<p>计算应该分配用于接收辅助数据的缓冲区的大小。</p>
<p><b>参数</b></p>
<p><b>返回值</b></p>
<p>12、<b>socket_create_listen():</b>打开套接字的端口以接受连接。</p>
<p><b>说明:</b>resource socket_create_listen ( int \$port [, int \$backlog = 128 ]  )</p>
<p>创建AF_INET类型的新套接字资源,侦听给定端口上等待新连接的所有本地接口。</p>
<p><b>参数</b></p>
<p>port:侦听所有接口上的端口</p>
<p>backlog:Backlog参数定义挂起连接的队列可能增长到的最大长度。SOMAXCONN可以作为Backlog参数传递,有关更多信息,请参见Socket_LEAN()。</p>
<p><b>返回值</b></p>
<p>成功返回一个新的套接字连接;失败返回错误。</p>
<p>可以使用Socket_LEST_ERROR()检索错误代码。可以将此代码传递给Socket_strror()以获得错误的文本解释。</p>
<p>13、<b>socket_create_pair():</b>创建一对不可区分的套接字,并将它们存储在数组中。</p>
<p><b>说明:</b>bool socket_create_pair ( int \$domain , int \$type , int \$protocol , array &\$fd  )</p>
<p>创建两个连接和不可区分的套接字,并将它们存储在FD中。这一功能通常用于IPC(InterProcessCommunications)。</p>
<p><b>参数</b></p>
<p>domain:domain参数指定套接字要使用的协议系列。有关完整列表,请参见Socket_CREATE()。</p>
<p>type:type参数选择套接字使用的通信类型。有关完整列表,请参见Socket_CREATE()。</p>
<p>protocol:protocol参数设置指定域中的特定协议,以便在返回的套接字上进行通信时使用。可以通过使用getProbyname()按名称检索适当的值。如果所需的协议是TCP或UDP,则还可以使用相应的常量SOLTCP和SOLUDP。</p>
<p>有关支持的协议的完整列表,请参见Socket_CREATE()。</p>
<p>fd:对插入两个套接字资源的数组的引用。</p>
<p><b>返回值</b></p>
<p>成功时返回 TRUE, 或者在失败时返回 FALSE。</p>
<p>14、<b>socket_export_stream():</b>将套接字扩展资源导出到封装套接字的流中。</p>
<p><b>说明:</b>resource socket_export_stream ( resource \$socket  )</p>
<p>15、<b>socket_get_option():</b>获取套接字的套接字选项。</p>
<p><b>说明:</b>mixed socket_get_option ( resource \$socket , int \$level , int \$optname  )</p>
<p>检索指定套接字的optname参数指定的选项的值。</p>
<p><b>参数</b></p>
<p>socket:使用Socket_create()或Socket_Accept()创建的有效套接字资源。</p>
<p>level:级别参数指定选项所在的协议级别。例如,要在套接字级别检索选项,将使用SOLSOCKET的级别参数。其他级别(如TCP)可以通过指定该级别的协议号来使用。协议编号可以通过使用getProbyname()函数找到。</p>
<p>optname:</p>
<p>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<th>Option</th><th>Description</th><th>Type</th>
</tr>
<tr>
<td>SO_DEBUG</td>
<td>报告是否正在记录调试信息。</td>
<td>int</td>
</tr>
<tr>
<td>SO_BROADCAST</td>
<td>报告是否支持广播消息的传输。</td>
<td>int</td>
</tr>
<tr>
<td>SO_REUSEADDR</td>
<td>报告是否可以重用本地地址。</td>
<td>int</td>
</tr>
<tr>
<td>SO_REUSEPORT</td>
<td>报告是否可以重用本地端口。</td>
<td>int</td>
</tr>
<tr>
<td>SO_KEEPALIVE</td>
<td>报告定期发送消息时是否保持连接处于活动状态。如果连接的套接字无法响应这些消息,则连接中断,写入该套接字的进程将被SIGPIPE信号通知。</td>
<td>int</td>
</tr>
<tr>
<td>SO_LINGER</td>
<td>报告如果存在数据,套接字是否停留在Socket_CLOSE()上。默认情况下,当套接字关闭时,它将尝试发送所有未发送的数据。对于面向连接的套接字,Socket_CLOSE()将等待其对等方确认数据。<br>
如果l_onOff为非零且l_linger为零,则所有未发送的数据将被丢弃,在面向连接的套接字情况下,rst(重置)被发送到对等端.<br/>
另一方面,如果l_onOff为非零且llinger为非零,则Socket_Close()将被阻塞,直到所有数据被发送或llinger中指定的时间消失为止。如果套接字是非阻塞的,则Socket_CLOSE()将失败并返回一个错误。
</td>
<td>array</td>
</tr>
<tr>
<td>SO_OOBINLINE</td>
<td>报告套接字是否遗漏带外数据内联。</td>
<td>int</td>
</tr>
<tr>
<td>SO_SNDBUF</td>
<td>报告发送缓冲区的大小。</td>
<td>int</td>
</tr>
<tr>
<td>SO_RCVBUF</td>
<td>报告接收缓冲区的大小。</td>
<td>int</td>
</tr>
<tr>
<td>SO_ERROR</td>
<td>报告有关错误状态的信息并清除它。</td>
<td>int</td>
</tr>
<tr>
<td>SO_TYPE</td>
<td>报告套接字类型(例如sock_stream)。</td>
<td>int</td>
</tr>
<tr>
<td>SO_DONTROUTE</td>
<td>报告传出消息是否绕过标准路由设施。</td>
<td>int</td>
</tr>
<tr>
<td>SO_RCVLOWAT</td>
<td>报告要处理套接字输入操作的最小字节数。</td>
<td>int</td>
</tr>
<tr>
<td>SO_RCVTIMEO</td>
<td>报告输入操作的超时值。</td>
<td>array</td>
</tr>
<tr>
<td>SO_SNDTIMEO</td>
<td>报告超时值,指定输出函数阻塞的时间量,因为流控制阻止发送数据。</td>
<td>array</td>
</tr>
<tr>
<td>SO_SNDLOWAT</td>
<td>报告要处理套接字输出操作的最小字节数。</td>
<td>int</td>
</tr>
<tr>
<td>TCP_NODELAY</td>
<td>报告是否禁用Nagle TCP算法。</td>
<td>int</td>
</tr>
<tr>
<td>MCAST_JOIN_GROUP</td>
<td>加入多播组。(在PHP 5.4中添加)</td>
<td>array</td>
</tr>
<tr>
<td>MCAST_LEAVE_GROUP</td>
<td>留下一个多播组。(在PHP 5.4中添加)</td>
<td>array</td>
</tr>
<tr>
<td>MCAST_BLOCK_SOURCE</td>
<td>阻止从特定源到达特定多播组的数据包,该分组必须之前已被加入。(在PHP 5.4中添加)</td>
<td>array</td>
</tr>
<tr>
<td>MCAST_UNBLOCK_SOURCE</td>
<td>解除从特定源地址到达特定多播组的数据包(重新开始接收),该分组必须已被加入。(在PHP 5.4中添加)</td>
<td>array</td>
</tr>
<tr>
<td>MCAST_JOIN_SOURCE_GROUP</td>
<td>接收发送到源地址与特定值匹配的特定多播组的数据包。(在PHP 5.4中添加)</td>
<td>array</td>
</tr>
<tr>
<td>MCAST_LEAVE_SOURCE_GROUP</td>
<td>停止接收发送到其源地址与特定值匹配的特定多播组的数据包。(在PHP 5.4中添加)</td>
<td>array</td>
</tr>
<tr>
<td>IP_MULTICAST_IF</td>
<td>IPv 4组播数据包的传出接口。(在PHP 5.4中添加)</td>
<td>int</td>
</tr>
<tr>
<td>IPV6_MULTICAST_IF</td>
<td>IPv 6组播数据包的传出接口。(在PHP 5.4中添加)</td>
<td>int</td>
</tr>
<tr>
<td>IP_MULTICAST_LOOP</td>
<td>IPv 4分组的组播回送策略,它确定由该套接字发送的多播分组是否也到达在该套接字所使用的传出接口上已加入相同多播组的同一主机中的接收方。这是默认情况。(在PHP 5.4中添加)</td>
<td>int</td>
</tr>
<tr>
<td>IPV6_MULTICAST_LOOP</td>
<td>类似于IP_MULTICAST_LOOP,但适用于IPv 6。(在PHP 5.4中添加)</td>
<td>int</td>
</tr>
<tr>
<td>IP_MULTICAST_TTL</td>
<td>传出IPv 4多播数据包的时间。这个值应该介于0(不要离开接口)和255之间。默认值为1(仅达到本地网络)。(在PHP 5.4中添加)</td>
<td>int</td>
</tr>
<tr>
<td>IPV6_MULTICAST_HOPS</td>
<td>类似于IP_MULTICAST_TTL,但适用于IPv 6数据包。值-1也被接受,这意味着应该使用路由默认值。(在PHP 5.4中添加)</td>
<td>int</td>
</tr>
</table>
</p>
<p>
<table cellspacing="0" cellpadding="0" border="1">
       <caption><strong>Available Socket Options</strong></caption>
       
        <thead>
         <tr>
          <th>Option</th>
          <th>Description</th>
          <th>Type</th>
         </tr>

        </thead>

        <tbody class="tbody">
         <tr>
          <td><strong><code>SO_DEBUG</code></strong></td>
          <td>
           Reports whether debugging information is being recorded.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_BROADCAST</code></strong></td>
          <td>
           Reports whether transmission of broadcast messages is supported.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_REUSEADDR</code></strong></td>
          <td>
           Reports whether local addresses can be reused.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_REUSEPORT</code></strong></td>
          <td>
           Reports whether local ports can be reused.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_KEEPALIVE</code></strong></td>
          <td>
           Reports whether connections are kept active with periodic transmission
           of messages. If the connected socket fails to respond to these messages,
           the connection is broken and processes writing to that socket are notified
           with a SIGPIPE signal.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_LINGER</code></strong></td>
          <td>
           <p class="para">
            Reports whether the <code class="parameter">socket</code> lingers on 
            <span class="function"><a href="function.socket-close.php" class="function">socket_close()</a></span> if data is present. By default, 
            when the socket is closed, it attempts to send all unsent data.
            In the case of a connection-oriented socket, 
            <span class="function"><a href="function.socket-close.php" class="function">socket_close()</a></span> will wait for its peer to
            acknowledge the data. 
           </p>
           <p class="para">
            If <var class="varname"><var class="varname">l_onoff</var></var> is non-zero and 
            <var class="varname"><var class="varname">l_linger</var></var> is zero, all the 
            unsent data will be discarded and RST (reset) is sent to the 
            peer in the case of a connection-oriented socket. 
           </p>
           <p class="para">
            On the other hand, if <var class="varname"><var class="varname">l_onoff</var></var> is 
            non-zero and <var class="varname"><var class="varname">l_linger</var></var> is non-zero,
            <span class="function"><a href="function.socket-close.php" class="function">socket_close()</a></span> will block until all the data 
            is sent or the time specified in <var class="varname"><var class="varname">l_linger</var></var>
            elapses. If the socket is non-blocking, 
            <span class="function"><a href="function.socket-close.php" class="function">socket_close()</a></span> will fail and return an error.
           </p>
          </td>
          <td>
           <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. The array will contain two keys:
           <var class="varname"><var class="varname">l_onoff</var></var> and 
           <var class="varname"><var class="varname">l_linger</var></var>. 
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_OOBINLINE</code></strong></td>
          <td>
           Reports whether the <code class="parameter">socket</code> leaves out-of-band data inline.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_SNDBUF</code></strong></td>
          <td>
           Reports the size of the send buffer.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>          
         </tr>

         <tr>
          <td><strong><code>SO_RCVBUF</code></strong></td>
          <td>
           Reports the size of the receive buffer.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>         
         </tr>

         <tr>
          <td><strong><code>SO_ERROR</code></strong></td>
          <td>
           Reports information about error status and clears it.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> (cannot be set by <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>)
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_TYPE</code></strong></td>
          <td>
           Reports the <code class="parameter">socket</code> type (e.g. 
           <strong><code>SOCK_STREAM</code></strong>).
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> (cannot be set by <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>)
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_DONTROUTE</code></strong></td>
          <td>
           Reports whether outgoing messages bypass the standard routing facilities.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_RCVLOWAT</code></strong></td>
          <td>
           Reports the minimum number of bytes to process for <code class="parameter">socket</code> 
           input operations.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_RCVTIMEO</code></strong></td>
          <td>
           Reports the timeout value for input operations.
          </td>
          <td>
           <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. The array will contain two keys:
           <var class="varname"><var class="varname">sec</var></var> which is the seconds part on the timeout
           value and <var class="varname"><var class="varname">usec</var></var> which is the microsecond part 
           of the timeout value. 
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_SNDTIMEO</code></strong></td>
          <td>
           Reports the timeout value specifying the amount of time that an output
           function blocks because flow control prevents data from being sent.
          </td>
          <td>
           <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. The array will contain two keys:
           <var class="varname"><var class="varname">sec</var></var> which is the seconds part on the timeout
           value and <var class="varname"><var class="varname">usec</var></var> which is the microsecond part 
           of the timeout value. 
          </td>
         </tr>

         <tr>
          <td><strong><code>SO_SNDLOWAT</code></strong></td>
          <td>
           Reports the minimum number of bytes to process for <code class="parameter">socket</code> output operations.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>
         </tr>

         <tr>
          <td><strong><code>TCP_NODELAY</code></strong></td>
          <td>
           Reports whether the Nagle TCP algorithm is disabled.
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
          </td>
         </tr>

         <tr>
          <td><strong><code>MCAST_JOIN_GROUP</code></strong></td>
          <td>
           Joins a multicast group. (added in PHP 5.4)
          </td>
          <td>
           <span class="type"><a href="language.types.array.php" class="type array">array</a></span> with keys <em>"group"</em>, specifying
           a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> with an IPv4 or IPv6 multicast address and
           <em>"interface"</em>, specifying either an interface
           number (type <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>) or a <em>string</em> with
           the interface name, like <em>"eth0"</em>.
           <em>0</em> can be specified to indicate the interface
           should be selected using routing rules. (can only be used in
           <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>)
          </td>
         </tr>

         <tr>
          <td><strong><code>MCAST_LEAVE_GROUP</code></strong></td>
          <td>
           Leaves a multicast group. (added in PHP 5.4)
          </td>
          <td>
           <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. See <strong><code>MCAST_JOIN_GROUP</code></strong> for
           more information. (can only be used in
           <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>)
          </td>
         </tr>

         <tr>
          <td><strong><code>MCAST_BLOCK_SOURCE</code></strong></td>
          <td>
           Blocks packets arriving from a specific source to a specific
           multicast group, which must have been previously joined.
           (added in PHP 5.4)
          </td>
          <td>
           <span class="type"><a href="language.types.array.php" class="type array">array</a></span> with the same keys as
           <strong><code>MCAST_JOIN_GROUP</code></strong>, plus one extra key,
           <em>source</em>, which maps to a <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
           specifying an IPv4 or IPv6 address of the source to be blocked.
           (can only be used in <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>)
          </td>
         </tr>

         <tr>
          <td><strong><code>MCAST_UNBLOCK_SOURCE</code></strong></td>
          <td>
           Unblocks (start receiving again) packets arriving from a specific
           source address to a specific multicast group, which must have been
           previously joined. (added in PHP 5.4)
          </td>
          <td>
           <span class="type"><a href="language.types.array.php" class="type array">array</a></span> with the same format as
           <strong><code>MCAST_BLOCK_SOURCE</code></strong>.
           (can only be used in <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>)
          </td>
         </tr>

         <tr>
          <td><strong><code>MCAST_JOIN_SOURCE_GROUP</code></strong></td>
          <td>
           Receive packets destined to a specific multicast group whose source
           address matches a specific value. (added in PHP 5.4)
          </td>
          <td>
           <span class="type"><a href="language.types.array.php" class="type array">array</a></span> with the same format as
           <strong><code>MCAST_BLOCK_SOURCE</code></strong>.
           (can only be used in <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>)
          </td>
         </tr>

         <tr>
          <td><strong><code>MCAST_LEAVE_SOURCE_GROUP</code></strong></td>
          <td>
           Stop receiving packets destined to a specific multicast group whose
           soure address matches a specific value. (added in PHP 5.4)
          </td>
          <td>
           <span class="type"><a href="language.types.array.php" class="type array">array</a></span> with the same format as
           <strong><code>MCAST_BLOCK_SOURCE</code></strong>.
           (can only be used in <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>)
          </td>
         </tr>

         <tr>
          <td><strong><code>IP_MULTICAST_IF</code></strong></td>
          <td>
           The outgoing interface for IPv4 multicast packets.
           (added in PHP 5.4)
          </td>
          <td>
           Either <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> specifying the interface number or a
           <span class="type"><a href="language.types.string.php" class="type string">string</a></span> with an interface name, like
           <em>eth0</em>. The value <span class="type"><span class="type 0">0</span></span> can be used to
           indicate the routing table is to used in the interface selection.
           The function <span class="function"><strong>socket_get_option()</strong></span> returns an
           interface index.
           Note that, unlike the C API, this option does NOT take an IP
           address. This eliminates the interface difference between
           <strong><code>IP_MULTICAST_IF</code></strong> and
           <strong><code>IPV6_MULTICAST_IF</code></strong>.
          </td>
         </tr>

         <tr>
          <td><strong><code>IPV6_MULTICAST_IF</code></strong></td>
          <td>
           The outgoing interface for IPv6 multicast packets.
           (added in PHP 5.4)
          </td>
          <td>
           The same as <strong><code>IP_MULTICAST_IF</code></strong>.
          </td>
         </tr>

         <tr>
          <td><strong><code>IP_MULTICAST_LOOP</code></strong></td>
          <td>
           The multicast loopback policy for IPv4 packets, which
           determines whether multicast packets sent by this socket also reach
           receivers in the same host that have joined the same multicast group
           on the outgoing interface used by this socket. This is the case by
           default.
           (added in PHP 5.4)
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> (either <em>0</em> or
           <em>1</em>). For <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>
           any value will be accepted and will be converted to a boolean
           following the usual PHP rules.
          </td>
         </tr>

         <tr>
          <td><strong><code>IPV6_MULTICAST_LOOP</code></strong></td>
          <td>
           Analogous to <strong><code>IP_MULTICAST_LOOP</code></strong>, but for IPv6.
           (added in PHP 5.4)
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>. See <strong><code>IP_MULTICAST_LOOP</code></strong>.
          </td>
         </tr>

         <tr>
          <td><strong><code>IP_MULTICAST_TTL</code></strong></td>
          <td>
           The time-to-live of outgoing IPv4 multicast packets. This should be
           a value between 0 (don't leave the interface) and 255. The default
           value is 1 (only the local network is reached).
           (added in PHP 5.4)
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> between 0 and 255.
          </td>
         </tr>

         <tr>
          <td><strong><code>IPV6_MULTICAST_HOPS</code></strong></td>
          <td>
           Analogous to <strong><code>IP_MULTICAST_TTL</code></strong>, but for IPv6
           packets. The value -1 is also accepted, meaning the route default
           should be used.
           (added in PHP 5.4)
          </td>
          <td>
           <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> between -1 and 255.
          </td>
         </tr>

        </tbody>
       
      </table>
</p>
<p><b>返回值</b></p>
<p>返回给定选项的值,或错误时返回false。</p>
<p>16、<b>socket_getopt():</b>别名 socket_get_option()</p>
<p>17、<b>socket_getpeername():</b>查询给定套接字的远程端,这可能会导致主机/端口或Unix文件系统路径,这取决于其类型。</p>
<p><b>说明:</b>bool socket_getpeername ( resource \$socket , string &\$address [, int &\$port ] )</p>
<p>查询给定套接字的远程端,这可能会导致主机/端口或Unix文件系统路径,这取决于其类型。</p>
<p><b>参数</b></p>
<p>socket:使用Socket_create()或Socket_Accept()创建的有效套接字资源。</p>
<p>address:如果给定的套接字类型为AF_INET或AF_INET 6,则Socket_getpeername()将在Address参数中以适当的表示法(例如127.0.0.1或fe80:1)返回对等点(远程)IP地址,如果存在可选端口参数,则还返回相关端口。</p>
<p>如果给定的套接字是AF_UNIX类型,则Socket_getpeername()将在Address参数中返回Unix文件系统路径(例如/var/run/daemon.sock)。</p>
<p>port:If given, this will hold the port associated to address. </p>
<p><b>返回值</b></p>
<p>成功时返回 TRUE, 或者在失败时返回 FALSE。 socket_getpeername() may also return FALSE if the socket type is not any of AF_INET, AF_INET6, or AF_UNIX, in which case the last socket error code is not updated. </p>
<p>18、<b>socket_getsockname():</b>查询给定套接字的本地端,这可能会导致主机/端口或Unix文件系统路径,这取决于其类型。</p>
<p><b>说明:</b>bool socket_getsockname ( resource \$socket , string &\$addr [, int &\$port ]  )</p>
<p>不应与使用Socket_CONNECT()创建的AF_UNIX套接字一起使用。只有在调用Socket_BIND()之后用Socket_Accept()或主服务器套接字创建的套接字才会返回有意义的值。</p>
<p><b>参数</b></p>
<p>socket: socket_create() 或者 socket_accept()创建的套接字。</p>
<p>addr:如果给定的套接字类型为AF_iNet或AF_INET 6,则Socket_getsockname()将在Address参数中以适当的表示法(例如127.0.0.1或fe80:1)返回本地IP地址,如果存在可选端口参数,则还返回相关端口。</p>
<p>如果给定的套接字是AF_UNIX类型,则Socket_getsockname()将在Address参数中返回Unix文件系统路径(例如/var/run/daemon.sock)。</p>
<p>port:如果提供,这将保持关联的端口。</p>
<p><b>返回值</b></p>
<p>成功时返回 TRUE, 或者在失败时返回 FALSE。</p>
<p>19、<b>socket_import_stream():</b>导入流</p>
<p><b>说明:</b>resource socket_import_stream ( resource \$stream  )</p>
<p>将封装套接字的流导入套接字扩展资源。</p>
<p><b>参数</b></p>
<p>stream:要导入的流资源</p>
<p><b>返回值</b></p>
<p>失败时返回false或null。</p>
<p>20、<b>socket_last_error():</b>返回套接字上的最后一个错误。</p>
<p><b>说明:</b>int socket_last_error ([ resource \$socket  ] )</p>
<p>如果将套接字资源传递给此函数,则返回在此特定套接字上发生的最后一个错误。</p>
<p>如果省略套接字资源,则返回上次失败的套接字函数的错误代码。后者对于像Socket_CREATE()这样的函数尤其有用,后者在失败时不返回套接字,而Socket_SELECT()可能由于与特定套接字没有直接关联的原因而失败。错误代码适合提供给Socket_strError(),后者返回描述给定错误代码的字符串。</p>
<p>如果没有发生错误,或者使用Socket_CLEAR_ERROR()清除了错误,则函数返回0。</p>
<p><b>参数</b></p>
<p>socket:socket_create()创建的套接字</p>
<p><b>返回值</b></p>
<p>此函数返回套接字错误代码。</p>
<p>21、<b>socket_read():</b>读取套接字的最大长度。</p>
<p><b>说明:</b>string socket_read ( resource \$socket , int \$length [, int \$type = PHP_BINARY_READ ]  )</p>
<p>读取socket_create() 或者 socket_accept()创建的套接字。 </p>
<p><b>参数</b></p>
<p>socket:套接字。</p>
<p>length:读取的最大字节数由Length参数指定。否则,可以使用\r、\n或\0结束读取(取决于类型参数,请参见下面)。</p>
<p>type:可选type参数是一个命名常量:</p>
<p>PHP_BINARY_READ (Default):use the system recv() function. Safe for reading binary data. </p>
<p>PHP_NORMAL_READ:reading stops at \n or \r.</p>
<p><b>返回值</b></p>
<p>成功时以字符串形式返回数据,错误时返回false(包括远程主机已关闭连接时)。可以使用Socket_LEST_ERROR()检索错误代码。可以将此代码传递给Socket_strror()以获得错误的文本表示。</p>
<p>22、<b>socket_recv():</b>从已连接的socket接收数据</p>
<p><b>说明:</b>int socket_recv ( resource \$socket , string &\$buf , int \$len , int \$flags  )</p>
<p>函数 socket_recv() 从 socket 中接受长度为 len 字节的数据,并保存在 buf 中。 socket_recv() 用于从已连接的socket中接收数据。除此之外,可以设定一个或多个 flags 来控制函数的具体行为。 </p>
<p>buf 以引用形式传递,因此必须是一个以声明的有效的变量。从 socket 中接收到的数据将会保存在 buf 中。</p>
<p><b>参数</b></p>
<p>socket:参数 socket 必须是一个由 socket_create() 创建的socket资源。</p>
<p>buf:从socket中获取的数据将被保存在由 buf 制定的变量中。 如果有错误发生,如链接被重置,数据不可用等等, buf 将被设为 NULL。</p>
<p>len:长度最多为 len 字节的数据将被接收。</p>
<p>flags:flags 的值可以为下列任意flag的组合。使用按位或运算符(|)来 组合不同的flag。</p>
<p>
<table cellspacing="0" cellpadding="0" border="1" >
<caption><strong>可用的 <code class="parameter">flags</code> 值</strong></caption>

<thead>
<tr>
<th>Flag</th>
<th>描述</th>
</tr>

</thead>

<tbody class="tbody">
<tr>
<td><strong><code>MSG_OOB</code></strong></td>
<td>
处理超出边界的数据
</td>
</tr>

<tr>
<td><strong><code>MSG_PEEK</code></strong></td>
<td>
从接受队列的起始位置接收数据,但不将他们从接受队列中移除。
</td>
</tr>

<tr>
<td><strong><code>MSG_WAITALL</code></strong></td>
<td>
在接收到至少 <code class="parameter">len</code> 字节的数据之前,造成一个阻塞,并暂停脚本运行(block)。但是,
如果接收到中断信号,或远程服务器断开连接,该函数将返回少于 <code class="parameter">len</code> 字节的数据。
</td>
</tr>

<tr>
<td><strong><code>MSG_DONTWAIT</code></strong></td>
<td>
如果制定了该flag,函数将不会造成阻塞,即使在全局设置中指定了阻塞设置。
</td>
</tr>

</tbody>

</table>
</p>
<p><b>返回值</b></p>
<p>socket_recv() 返回一个数字,表示接收到的字节数。如果发生了错误,则返回 FALSE 错误码可使用 socket_last_error() 接收。也可使用函数 socket_strerror() 来取得关于错误的文字描述。 </p>
<p>23、<b>socket_recvfrom():</b>从套接字接收数据,无论它是否面向连接。</p>
<p><b>说明:</b>int socket_recvfrom ( resource \$socket , string &\$buf , int \$len , int \$flags , string &\$name [, int &\$port ] )</p>
<p>Socket_recvfrom()函数使用套接字从端口上的名称(如果套接字不是AF_UNIX类型)接收BUF中的Len字节数据。Socket_recvfrom()可用于从连接和未连接的套接字收集数据。此外,可以指定一个或多个标志来修改函数的行为。</p>
<p>名称和端口必须通过引用传递。如果套接字不面向连接,则名称将设置为远程主机的Internet协议地址或UNIX套接字的路径。如果套接字面向连接,则名称为NULL.此外,在未连接的AF_INET或AF_INET 6套接字的情况下,端口将包含远程主机的端口。</p>
<p><b>参数</b></p>
<p>socket:套接字必须是以前由Socket_create()创建的套接字资源。</p>
<p>buf:接收到的数据将被取到用BUF指定的变量。</p>
<p>len:最多可以从远程主机获取连字节。</p>
<p>flags:flags的值可以是以下flags的任意组合,并与二进制OR(|)运算符连接。</p>
<p>
<table cellspacing="0" cellpadding="0" border="1" >
<caption><strong>Possible values for <code class="parameter">flags</code></strong></caption>

<thead>
<tr>
<th>Flag</th>
<th>Description</th>
</tr>

</thead>

<tbody class="tbody">
<tr>
<td><strong><code>MSG_OOB</code></strong></td>
<td>
Process out-of-band data.
</td>
</tr>

<tr>
<td><strong><code>MSG_PEEK</code></strong></td>
<td>
Receive data from the beginning of the receive queue without
removing it from the queue.
</td>
</tr>

<tr>
<td><strong><code>MSG_WAITALL</code></strong></td>
<td>
Block until at least <code class="parameter">len</code> are received.
However, if a signal is caught or the remote host disconnects, the
function may return less data.
</td>
</tr>

<tr>
<td><strong><code>MSG_DONTWAIT</code></strong></td>
<td>
With this flag set, the function returns even if it would normally
have blocked.
</td>
</tr>

</tbody>

</table>
</p>
<p>name:如果套接字类型为AF_UNIX类型,则名称是文件的路径。否则,对于未连接的套接字,名称是远程主机的IP地址,如果套接字是面向连接的,则为NULL。</p>
<p>port:此参数仅适用于AF_INET和AF_INET 6套接字,并指定接收数据的远程端口。如果套接字面向连接,端口将为空.</p>
<p><b>返回值</b></p>
<p>Socket_recvfrom()返回接收到的字节数,如果出现错误,返回false。可以通过调用Socket_LEVER_ERROR()来检索实际的错误代码。可以将此错误代码传递给Socket_strror()以获得错误的文本解释。</p>
<p>24、<b>socket_recvmsg():</b>读取信息</p>
<p><b>说明:</b>int socket_recvmsg ( resource \$socket , array &\$message [, int \$flags = 0 ] )</p>
<p>25、<b>socket_select():</b>select()系统调用给定的具有指定超时的套接字数组</p>
<p><b>说明:</b>int socket_select ( array &\$read , array &\$write , array &\$except , int \$tv_sec [, int \$tv_usec = 0 ] )</p>
<p>socket_select() accepts arrays of sockets and waits for them to change status. Those coming with BSD sockets background will recognize that those socket resource arrays are in fact the so-called file descriptor sets. Three independent arrays of socket resources are watched. </p>
<p><b>参数</b></p>
<p>read:read数组中列出的套接字将被监视,以查看字符是否可用于读取(更准确地说,查看读取是否不会阻塞-特别是,套接字资源也可以在文件结束时准备好,在这种情况下,Socket_read()将返回一个零长度字符串)。</p>
<p>write:将监视write数组中列出的套接字,以查看写入是否会阻塞。</p>
<p>except:eexcept数组中列出的套接字将被监视异常。</p>
<p>tv_sec:tv_sec和tv_usc共同构成超时参数。超时是Socket_SELECT()返回之前经过的时间的上限。tv_sec可能为零,从而导致Socket_select()立即返回。这对于轮询很有用。如果tv_sec为空(没有超时),则Socket_SELECT()可以无限期地阻塞。</p>
<p>tv_usec:You do not need to pass every array to socket_select(). You can leave it out and use an empty array or NULL instead. Also do not forget that those arrays are passed by reference and will be modified after socket_select() returns. </p>
<p><b>返回值</b></p>
<p>在成功时,Socket_SELECT()返回包含在修改过的数组中的套接字资源数,如果超时在任何有趣的事情发生之前过期,则可能为零。如果出错,则返回false。可以使用Socket_LEST_ERROR()检索错误代码。</p>
<p>26、<b>socket_send():</b>向连接的套接字发送数据</p>
<p><b>说明:</b>int socket_send ( resource \$socket , string \$buf , int \$len , int \$flags )</p>
<p>函数Socket_Send()从BUF向套接字发送len字节。</p>
<p><b>参数</b></p>
<p>socket:Socket_create()或Socket_Accept()创建的有效套接字资源。</p>
<p>buf:包含将发送到远程主机的数据的缓冲区。</p>
<p>len:从BUF发送到远程主机的字节数。</p>
<p>flags:flags的值可以是以下标志的任意组合,并与二进制OR(|)运算符连接。</p>
<p>
<table cellspacing="0" cellpadding="0" border="1" >
<caption><strong>Possible values for <code class="parameter">flags</code></strong></caption>

<tbody class="tbody">
<tr>
<td><strong><code>MSG_OOB</code></strong></td>
<td>
Send OOB (out-of-band) data.
</td>
</tr>

<tr>
<td><strong><code>MSG_EOR</code></strong></td>
<td>
Indicate a record mark. The sent data completes the record.
</td>
</tr>

<tr>
<td><strong><code>MSG_EOF</code></strong></td>
<td>
Close the sender side of the socket and include an appropriate
notification of this at the end of the sent data. The sent data
completes the transaction.
</td>
</tr>

<tr>
<td><strong><code>MSG_DONTROUTE</code></strong></td>
<td>
Bypass routing, use direct interface.
</td>
</tr>

</tbody>

</table>
</p>
<p><b>返回值</b></p>
<p>Socket_Send()返回发送的字节数,或错误时返回false。</p>
<p>27、<b>socket_sendmsg():</b>发送消息</p>
<p><b>说明:</b>int socket_sendmsg ( resource \$socket , array \$message [, int \$flags = 0 ] )</p>
<p><b>返回值</b></p>
<p>Returns the number of bytes sent, 或者在失败时返回 FALSE. </p>
<p>28、<b>socket_sendto():</b>向套接字发送消息,无论它是否已连接。</p>
<p><b>说明:</b>int socket_sendto ( resource \$socket , string \$buf , int \$len , int \$flags , string \$addr [, int \$port = 0 ]  )</p>
<p>函数Socket_sendto()通过套接字将Len字节从BUF发送到地址addr的端口。</p>
<p><b>参数:</b></p>
<p>socket:socket_create()创建的套接字。</p>
<p>buf:发送的数据将从缓冲区BUF获取。</p>
<p>len:来自BUF的Len字节将被发送。</p>
<p>flags:flags的值可以是以下flags的任意组合,并与二进制OR(|)运算符连接。</p>
<p>
<table cellspacing="0" cellpadding="0" border="1">
        <caption><strong>Possible values for <code class="parameter">flags</code></strong></caption>
        
         <tbody class="tbody">
          <tr>
           <td><strong><code>MSG_OOB</code></strong></td>
           <td>
            Send OOB (out-of-band) data.
           </td>
          </tr>

          <tr>
           <td><strong><code>MSG_EOR</code></strong></td>
           <td>
            Indicate a record mark. The sent data completes the record.
           </td>
          </tr>

          <tr>
           <td><strong><code>MSG_EOF</code></strong></td>
           <td>
            Close the sender side of the socket and include an appropriate
            notification of this at the end of the sent data. The sent data
            completes the transaction.
           </td>
          </tr>

          <tr>
           <td><strong><code>MSG_DONTROUTE</code></strong></td>
           <td>
            Bypass routing, use direct interface.
           </td>
          </tr>

         </tbody>
        
       </table>
</p>
<p>addr:远程主机的IP地址。</p>
<p>port:端口是发送数据的远程端口号。</p>
<p><b>返回值</b></p>
<p>Socket_sendto()返回发送到远程主机的字节数,如果发生错误,返回false。</p>
<p>29、<b>socket_set_block():</b>在套接字资源上设置阻塞模式</p>
<p><b>说明:</b>bool socket_set_block ( resource \$socket )</p>
<p>函数socket_set_block()删除套接字参数指定的套接字上的O_NONBLOCK标志。</p>
<p>当一个操作(例如接收、发送、连接、接受、.)在阻塞套接字上执行,脚本将暂停其执行,直到收到信号或可以执行操作。</p>
<p><b>参数</b></p>
<p>socket:使用Socket_create()或Socket_Accept()创建的有效套接字资源。</p>
<p><b>返回值</b></p>
<p>成功时返回 TRUE, 或者在失败时返回 FALSE。</p>
<p>30、<b>socket_set_nonblock():</b>为文件描述符fd设置非阻塞模式。</p>
<p><b>说明:</b>bool socket_set_nonblock ( resource \$socket  )</p>
<p>函数socket_set_nonblock()在套接字参数指定的套接字上设置O_NONBLOCK标志。</p>
<p>当一个操作(例如接收、发送、连接、接受、.)在非阻塞套接字上执行,脚本将不会暂停其执行,直到它收到信号或它可以执行操作。相反,如果操作将导致块,则被调用的函数将失败。</p>
<p><b>参数</b></p>
<p>socket: socket_create() 或者 socket_accept()创建的套接字。</p>
<p><b>返回值</b></p>
<p>成功时返回 TRUE, 或者在失败时返回 FALSE。 </p>
<p>31、<b>socket_set_option():</b>为套接字设置套接字选项。</p>
<p><b>说明:</b>bool socket_set_option ( resource \$socket , int \$level , int \$optname , mixed \$optval  )</p>
<p>函数在指定的协议级别将optname参数指定的选项设置为该套接字的optval参数所指向的值。</p>
<p><b>参数</b></p>
<p>socket:socket_create() 或者 socket_accept()创建的套接字。</p>
<p>level:level参数指定选项所在的协议级别。例如,要在套接字级别检索选项,将使用SOLSOCKET的级别参数。其他level(如TCP)可以通过指定该级别的协议号来使用。协议编号可以通过使用getProbyname()函数找到。</p>
<p>optname:可用的套接字选项与SOCKET_GET_OPTION()函数的套接字选项相同。</p>
<p>optval:The option value. </p>
<p><b>返回值</b></p>
<p>成功时返回 TRUE, 或者在失败时返回 FALSE。</p>
<p>32、<b>socket_setopt():</b>别名 socket_set_option()</p>
<p>33、<b>socket_shutdown():</b>关闭套接字以进行接收、发送或两者兼用。</p>
<p><b>说明:</b>bool socket_shutdown ( resource \$socket [, int \$how = 2 ]  )</p>
<p>函数允许您停止通过套接字发送传入、传出或所有数据(默认值)</p>
<p><b>参数</b></p>
<p>socket: socket_create()创建的套接字。</p>
<p>how:how的值可以是以下内容之一:</p>
<p>
<table  cellspacing="0" cellpadding="0" border="1">
    <caption><strong>possible values for <code class="parameter">how</code></strong></caption>
    <tbody class="tbody">
        <tr>
            <td><em>0</em></td>
            <td>
                Shutdown socket reading
            </td>
        </tr>
        <tr>
            <td><em>1</em></td>
            <td>
                Shutdown socket writing
            </td>
        </tr>
        <tr>
            <td><em>2</em></td>
            <td>
                Shutdown socket reading and writing
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><b>返回值</b></p>
<p>成功时返回 TRUE, 或者在失败时返回 FALSE。 </p>
<p>34、<b>socket_strerror():</b>返回描述套接字错误的字符串。</p>
<p><b>说明:</b>string socket_strerror ( int \$errno  )</p>
<p>获取一个套接字错误代码作为它的errno参数,该代码由Socket_LEVEL_ERROR()返回,并返回相应的解释性文本。</p>
<p>虽然套接字扩展生成的错误消息是英文的,但使用此函数检索的系统消息将根据当前区域设置(LC_Messages)显示。</p>
<p><b>参数</b></p>
<p>errno:一个有效的套接字错误号,很可能是由Socket_LEST_ERROR()生成的。</p>
<p><b>返回值</b></p>
<p>返回与errno参数关联的错误消息。</p>
<p>35、<b>socket_write():</b>写入套接字</p>
<p><b>说明:</b>int socket_write ( resource \$socket , string \$buffer [, int \$length = 0 ]  )</p>
<p>函数Socket_WRIT()从给定的缓冲区写入套接字。</p>
<p><b>参数</b></p>
<p>socket:socket_create创建的套接字。</p>
<p>buffer:要写入的缓冲区。</p>
<p>length:可选参数长度可以指定写入套接字的字节的替代长度。如果此长度大于缓冲区长度,则静默地将其截断为缓冲区的长度。</p>
<p><b>返回值</b></p>
<p>返回成功写入套接字或者在失败时返回false的字节数。可以使用Socket_LEST_ERROR()检索错误代码。可以将此代码传递给Socket_strror()以获得错误的文本解释。</p>
<p>套接字_WITE()返回零是完全有效的,这意味着没有写入任何字节。确保在发生错误时使用=操作符检查false。</p>
EOF;

echo $str;

猜你喜欢

转载自blog.csdn.net/zcd3f/article/details/84874672