1. 程式人生 > >php socket常用函式

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()返回零是完全有效的,這意味著沒有寫入任何位元組。確保在發生