国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP的Socket函數(shù)參考

瀏覽:17日期:2024-02-20 17:27:13

這些Socket函數(shù)直接跟互聯(lián)網(wǎng)的協(xié)議進(jìn)行發(fā)送信息。相對(duì)于fopensock的流來(lái)講,他們操作在一個(gè)比較底層的級(jí)別。通常,他們都是對(duì)C 函數(shù)進(jìn)行封裝,并且名稱(chēng)都類(lèi)似。如果你有使用C進(jìn)行socket編程的經(jīng)驗(yàn),那么使用這些函數(shù)將是非常熟練的。我們這里不討論特別詳細(xì)的socket編程。使用這些函數(shù)能夠解決高層級(jí)別函數(shù)所不能解決的難題。使用這些函數(shù)能夠?qū)崿F(xiàn)類(lèi)似fopen的功能,你也許有很多方法來(lái)實(shí)現(xiàn)socket的功能,比如在PHP中使用CLI(Command-line Interface)來(lái)實(shí)現(xiàn)的Internet守護(hù)進(jìn)程。resource socket_accept(resource socket)在你的腳本服務(wù)器端中,使用socket_accept接受一個(gè)進(jìn)入的連接。你必須首先產(chǎn)生一個(gè)socket,綁定它到一個(gè)名字,并且設(shè)置它監(jiān)聽(tīng)一個(gè)端口。在塊模式中,socket_accept將產(chǎn)生一個(gè)唯一接受后的連接。在非塊模式中,它沒(méi)有建立連接則返回false。另外,當(dāng)你有了一個(gè)新的socket資源后就能夠進(jìn)行讀寫(xiě)操作。下面我們將示范一個(gè)簡(jiǎn)單的回顯服務(wù)器端。它運(yùn)行在CLI(命令行)下面,它在12345端口等待客戶(hù)端的連接。socket_accept<?php set_time_limit(0); //create the socket if(($socket = socket_create(AF_INET, SOCK_STREAM, 0)) < 0){ print('Couldn't create socket: ' . socket_strerror(socket_last_error()) . 'n'); } //bind it to the given address and port if(($error = socket_bind($socket, gethostbyname($_SERVER['HOSTNAME']), 12345)) < 0){ print('Couldn't bind socket: ' . socket_strerror(socket_last_error()) . 'n'); } if(($error = socket_listen($socket, 5)) < 0){ print('Couldn't list on socket: ' . socket_strerror(socket_last_error()) . 'n'); } while(TRUE){ //wait for connection if(($accept = socket_accept($socket)) < 0){ print('Error while reading: ' . socket_strerror($message) . 'n'); break; } //send welcome message socket_write($accept, 'Connection acceptedn'); print(date('Y-m-d H:i:s') . ' STATUS: Connection acceptedn'); ob_flush(); while(TRUE){ //read line from client if(FALSE === ($line = socket_read($accept, 1024))){ print('Couldn't read from socket: ' . socket_strerror(socket_last_error()) . 'n'); break 2; } if(!@socket_write($accept, 'ECHO: $line')){ print(date('Y-m-d H:i:s') . ' STATUS: Connection interruptedn'); break; } print(date('Y-m-d H:i:s') . ' READ: $line'); ob_flush(); } socket_close($accept); }?>

bool socket_bind(resource socket, string address, integer port)這個(gè)socket_bind()把一個(gè)socket資源綁定在一個(gè)地址上。這個(gè)socket必須由socket_create()函數(shù)返回的一個(gè)資源。這個(gè)地址必須是一個(gè)IP地址或者是一個(gè)保存Unix socket的路徑。如果是運(yùn)行在Internet上的socket,你還必須提供一個(gè)端口。socket_clear_error(resource socket)這個(gè)函數(shù)能夠清除制定socket的錯(cuò)誤,如果沒(méi)有指定參數(shù),那么將清除所有socket的錯(cuò)誤。socket_close(resource socket)socket_close函數(shù)關(guān)閉一個(gè)socket并且清除該socket所占用的內(nèi)存資源。boolean socket_connect(resource socket, string address, integer port)這個(gè)函數(shù)創(chuàng)建一個(gè)客戶(hù)端到一個(gè)端口或者socket的連接。你必須提供一個(gè)由socket_create產(chǎn)生的socket。這個(gè)address參數(shù)必須到一個(gè)socket的路徑或者是一個(gè)IP地址。如果是后者,還必須跟一個(gè)數(shù)字的端口號(hào)。下面例子演示了使用UDP協(xié)議的連接到游戲服務(wù)器然后獲取信息的過(guò)程。socket_connect<?php //create UDP socket if(($socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) < 0){ print('Couldn't create socket: ' . socket_strerror(socket_last_error()) . 'n'); } //timeout after 5 seconds socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec'=>5,'usec'=>0)); //connect to the RtCW master server if(!socket_connect($socket, 'wolfmaster.idsoftware.com', 27950)){ print('Couldn't connect: ' . socket_strerror(socket_last_error()) . 'n'); } //send request for servers socket_write($socket, 'xFFxFFxFFxFFgetserversx00'); //get servers $server = array(); while(FALSE !== ($line = @socket_read($socket, 4096))){ //parse data for($i=22; ($i+5) < strlen($line); $i += 7){ $ip = ord(substr($line, $i+1, 1)) . '.' . ord(substr($line, $i+2, 1)) . '.' . ord(substr($line, $i+3, 1)) . '.' . ord(substr($line, $i+4, 1)); $port = (ord(substr($line, $i+5, 1)) * 256) + ord(substr($line, $i+6, 1)); $server[] = array('ip'=>$ip, 'port'=>$port); } } print('<h1>' . count($server) . ' Servers</h1>n'); //loop over servers, getting status foreach($server as $s){ print('<h1>{$s['ip']}:{$s['port']}</h1>n'); //connect to RtCW server if(!socket_connect($socket, $s['ip'], $s['port'])){ print('<p>n' . socket_strerror(socket_last_error()) . 'n</p>n'); continue; } //send request for status socket_write($socket, 'xFFxFFxFFxFFgetstatusx00'); //get status from server if(FALSE === ($line = @socket_read($socket, 1024))){ print('<p>n' . socket_strerror(socket_last_error()) . 'n</p>n'); continue; } $part = explode('n', $line); //settings are in second line separated by backslashes $setting = explode('', $part[1]); print('<h2>Configuration</h2>n'); print('<p>n'); for($s=1; $s < count($setting); $s += 2){ print('tt{$setting[$s]} = {$setting[$s+1]}<br>n'); } print('</p>n'); print('<h2>Players</h2>n'); $lastPlayer = count($part) - 1; for($p=2; $p < $lastPlayer; $p++){ $player = explode(' ', $part[$p]); print('{$player[2]} Score={$player[0]} ' . 'Ping={$player[1]}<br>n'); } print('</p>n'); ob_flush(); } print('</table>n'); socket_close($socket);?>resource socket_create(integer family, integer socket_type, integer protocol)socket_create初始化一個(gè)socket的結(jié)構(gòu)。第一個(gè)參數(shù)是一個(gè)protocol family,或者域。你必須使用AF_INET來(lái)指定一個(gè)Internet連接,或者使用AF_UNIX來(lái)指定一個(gè)Unix socket連接。第二個(gè)參數(shù)是一個(gè)socket的類(lèi)型,你可以從下面的表中選擇。一般情況下,使用SOCK_STREAM來(lái)使用TCP協(xié)議,UDP協(xié)議使用SOCK_DGRAM。第三個(gè)參數(shù)指定為一個(gè)協(xié)議。使用SOL_TCP或SOL_UDP來(lái)分別對(duì)應(yīng)TCP和UDP協(xié)議。還有一個(gè)選擇是你能夠使用 getprotobyname函數(shù)來(lái)處理。Socket 類(lèi)型常量 描述SOCK_DGRAM 自動(dòng)尋址數(shù)據(jù)包socketSOCK_RAW RAW協(xié)議接口SOCK_RDM 可靠交換消息SOCK_SEQPACKET 順序數(shù)據(jù)包socketSOCK_STREAM 流socketresource socket_create_listen(integer port, integer backlog)使用socket_create_listen是一種比socket_create更簡(jiǎn)單的產(chǎn)生一個(gè)socket進(jìn)行監(jiān)聽(tīng)。這個(gè)產(chǎn)生的socket將監(jiān)聽(tīng)指定的端口,后面可選的參數(shù)backlog是設(shè)置允許最大的連接數(shù)。boolean socket_create_pair(integer family, integer socket_type, integer protocol, array handles)socket_create_pair函數(shù)產(chǎn)生一對(duì)socket連接。首先前三個(gè)參數(shù)是對(duì)一個(gè)socket_create的描述,這個(gè)handles參數(shù)是一個(gè)包含兩個(gè)socket資源的數(shù)組。該函數(shù)是對(duì)C里面socketpair函數(shù)的封裝。socket_create_pair<?php if(!socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $socket)){ print('Couldn't make sockets!n'); exit(); } $child = pcntl_fork(); if($child == -1){ print('Couldn't fork!n'); exit(); } elseif($child > 0){ //parent socket_close($socket[0]); print('Parent: waiting for messagen'); $message = socket_read($socket[1], 1024, PHP_NORMAL_READ); print('Parent: got message--$messagen'); socket_write($socket[1], 'Hello, Child Process!n'); pcntl_waitpid($child, $status); }else{ //child socket_close($socket[1]); socket_write($socket[0], 'Hello, Parent Process!n'); print('Child: waiting for messagen'); $message = socket_read($socket[0], 1024, PHP_NORMAL_READ); print('Child: got message--$messagen'); exit(0); }?>value socket_get_option(resource socket, integer level, integer option)socket_get_option函數(shù)返回一個(gè)下表中所列的一個(gè)添加值,你必須提供一個(gè)由socket_create產(chǎn)生的socket資源和一個(gè)等級(jí)。這個(gè)獲取的socket級(jí)別,可以使用SOL_SOCKET來(lái)確定這個(gè)級(jí)別參數(shù)。另外,使用協(xié)議,比如象SOL_TCP來(lái)表示一個(gè)TCP協(xié)議。這些選項(xiàng)可能是由socket_set_option設(shè)置的。socket_get_options<?php $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); print('SO_BROADCAST: ' . socket_get_option($socket, SOL_SOCKET, SO_BROADCAST) . '<br>n'); print('SO_DEBUG: ' . socket_get_option($socket, SOL_SOCKET, SO_DEBUG) . '<br>n'); print('SO_DONTROUTE: ' . socket_get_option($socket, SOL_SOCKET, SO_DONTROUTE) . '<br>n'); print('SO_ERROR: ' . socket_get_option($socket, SOL_SOCKET, SO_ERROR) . '<br>n'); print('SO_KEEPALIVE: ' . socket_get_option($socket, SOL_SOCKET, SO_KEEPALIVE) . '<br>n'); print('SO_LINGER: ' . print_r(socket_get_option($socket, SOL_SOCKET, SO_LINGER), TRUE) . '<br>n'); print('SO_OOBINLINE: ' . socket_get_option($socket, SOL_SOCKET, SO_OOBINLINE) . '<br>n'); print('SO_RCVBUF: ' . socket_get_option($socket, SOL_SOCKET, SO_RCVBUF) . '<br>n'); print('SO_RCVLOWAT: ' . socket_get_option($socket, SOL_SOCKET, SO_RCVLOWAT) . '<br>n'); print('SO_RCVTIMEO: ' . print_r(socket_get_option($socket, SOL_SOCKET, SO_RCVTIMEO), TRUE) . '<br>n'); print('SO_REUSEADDR: ' . socket_get_option($socket, SOL_SOCKET, SO_REUSEADDR) . '<br>n'); print('SO_SNDBUF: ' . socket_get_option($socket, SOL_SOCKET, SO_SNDBUF) . '<br>n'); print('SO_SNDLOWAT: ' . socket_get_option($socket, SOL_SOCKET, SO_SNDLOWAT) . '<br>n'); print('SO_SNDTIMEO: ' . print_r(socket_get_option($socket, SOL_SOCKET, SO_SNDTIMEO), TRUE) . '<br>n'); print('SO_TYPE: ' . socket_get_option($socket, SOL_SOCKET, SO_TYPE) . '<br>n');?>

Socket選項(xiàng)表選項(xiàng) 描述SO_BROADCAST 允許自動(dòng)尋址的socket發(fā)送和接受廣播包SO_DEBUG 打開(kāi)socket調(diào)試功能,只有root才有權(quán)限打開(kāi)該選項(xiàng)SO_DONTROUTE 不接受路由包通過(guò)網(wǎng)關(guān)SO_ERROR 獲取并且清除最后一次的socket錯(cuò)誤,這個(gè)選項(xiàng)也許不用設(shè)置SO_KEEPALIVE 打開(kāi)保持激活狀態(tài)的消息SO_LINGER Socket_colse和socket_shutdown的中止消息發(fā)送超時(shí),該選項(xiàng)使用一個(gè)數(shù)組,包括l_onoff和l_linger兩個(gè)鍵。SO_OOBINLINE 把數(shù)據(jù)直接插入到接受緩沖SO_RCVBUF 限制接受緩沖的最大字節(jié)SO_RCVLOWAT 延遲通過(guò)接受一個(gè)最小的數(shù)據(jù)SO_RCVTIMEO 延遲報(bào)告一個(gè)接受超時(shí)報(bào)告,使用數(shù)組的兩個(gè)鍵:sec和usecSO_REUSEADDR 允許重新使用本地地址SO_SNDBUF 限制發(fā)送緩沖的最大字節(jié)SO_SNDLOWAT 延遲發(fā)送數(shù)據(jù)到這個(gè)協(xié)議當(dāng)接受一個(gè)最小的字節(jié)SO_SNDTIMEO 延遲報(bào)告超時(shí)錯(cuò)誤,當(dāng)發(fā)送發(fā)送通過(guò)一個(gè)時(shí)間。該選項(xiàng)使用數(shù)組的鍵值:sec和usecSO_TYPE 獲取socket的類(lèi)型,該選項(xiàng)可能不用設(shè)置

boolean socket_getpeername(resource socket, string address, integer port)socket_getpeername從指定的一個(gè)連接中獲取地址和端口。如果連接為Unix socket,那么將返回文件系統(tǒng)的路徑。boolean socket_getsockname(resource socket, string address, integer port)socket_getsockname放置一個(gè)名字到socket中,并且加上address和port參數(shù)。失敗返回false。(下面的socket_iovec_* 函數(shù)不太了解,不敢亂翻譯,保留原文)boolean socket_iovec_add(resource iovector, integer length)The socket_iovec_add unction adds an I/O vector to the scatter/gather array.resource socket_iovec_alloc(integer count, …)The socket_iovec_alloc function returns a resource for handling a collection of I/O vectors. The first argument specifies the number of vectors. Following arguments specify the length of each vector.boolean socket_iovec_delete(resource iovector, integer position)The socket_iovec_delete function removes the I/O vector at the given position.string socket_iovec_fetch(resource iovector, integer position)The socket_iovec_fetch function returns the value of the specified vector in the I/O vector resource.boolean socket_iovec_free(resource iovector)The socket_iovec_free function frees the memory used for an I/O vector resource.boolean socket_iovec_set(resource iovector, integer position, string value)The socket_iovec_set sets the value of I/O vector at the given position.integer socket_last_error(resource socket)socket_last_error函數(shù)返回操作中的任何socket函數(shù)產(chǎn)生的最后錯(cuò)誤。你也許在上面函數(shù)中設(shè)置了socket資源的 socket選項(xiàng)在指定的連接上。下面的表列出了返回的錯(cuò)誤代碼,你同樣可以使用soclet_strerror函數(shù)來(lái)獲取詳細(xì)的錯(cuò)誤。使用 socket_clear_error函數(shù)清除socket的錯(cuò)誤。Socket錯(cuò)誤代碼表常量描述SOCKET_E2BIG 參數(shù)列表太長(zhǎng)SOCKET_EACCES沒(méi)有許可權(quán)限SOCKET_EADDRINUSE地址已經(jīng)被使用SOCKET_EADDRNOTAVAIL不能解析請(qǐng)求的地址SOCKET_EADV廣播(廣告)錯(cuò)誤SOCKET_EAFNOSUPPORTAddress family不支持的協(xié)議SOCKET_EAGAIN資源暫時(shí)不能獲得SOCKET_EALREADY 操作已經(jīng)在執(zhí)行SOCKET_EBADE 無(wú)效的交換SOCKET_EBADF錯(cuò)誤的文件描述符SOCKET_EBADFD文件描述符錯(cuò)誤的狀態(tài)SOCKET_EBADMSG錯(cuò)誤的消息SOCKET_EBADR無(wú)效的請(qǐng)求描述SOCKET_EBADRQC 無(wú)效的請(qǐng)求代碼SOCKET_EBADSLT無(wú)效的操作位置SOCKET_EBUSY驅(qū)動(dòng)或資源繁忙SOCKET_ECHRNG 信道號(hào)碼超出范圍SOCKET_ECOMM發(fā)送通訊錯(cuò)誤SOCKET_ECONNABORTED軟件原因?qū)е峦ㄐ兄袛郤OCKET_ECONNREFUSED連接被拒絕SOCKET_ECONNRESET連接被相同的socket重置SOCKET_EDESTADDRREQ必須需要目標(biāo)地址SOCKET_EDQUOT 超出磁盤(pán)配額SOCKET_EEXIST 文件已存在SOCKET_EFAULT 錯(cuò)誤的地址SOCKET_EHOSTDOWN主機(jī)已關(guān)閉SOCKET_EHOSTUNREACH沒(méi)有路由到主機(jī)SOCKET_EIDRM表示ID被刪除SOCKET_EINPROGRESS操作正在執(zhí)行SOCKET_EINTR系統(tǒng)調(diào)用被阻止SOCKET_EINVAL無(wú)效的參數(shù)SOCKET_EIO輸入/ 輸出錯(cuò)誤SOCKET_EISCONN傳輸終端已經(jīng)連接SOCKET_EISDIR 是一個(gè)目錄SOCKET_EISNAM是一個(gè)指定的類(lèi)型文件SOCKET_EL2HLT級(jí)別2已中止SOCKET_EL2NSYNC級(jí)別2不同步SOCKET_EL3HLT級(jí)別3已中止SOCKET_EL3RST級(jí)別3被重置SOCKET_ELNRNG 連接號(hào)超出范圍SOCKET_ELOOP太多級(jí)別的符號(hào)連接SOCKET_EMEDIUMTYPE錯(cuò)誤的媒介類(lèi)型(中間類(lèi)型)SOCKET_EMFILE太多打開(kāi)的文件SOCKET_EMLINK 太多的連接SOCKET_EMSGSIZE消息太長(zhǎng)SOCKET_EMULTIHOP嘗試次數(shù)太多SOCKET_ENAMETOOLONG文件名太長(zhǎng)SOCKET_ENETDOWN; 網(wǎng)絡(luò)已關(guān)閉SOCKET_ENETRESET; 網(wǎng)絡(luò)中斷,連接被重置SOCKET_ENETUNREACH網(wǎng)絡(luò)不可達(dá)SOCKET_ENFILE系統(tǒng)中太多打開(kāi)的文件SOCKET_ENOANO 沒(méi)有正極SOCKET_ENOBUFS沒(méi)有可用的緩存空間SOCKET_ENOCSI沒(méi)有可用的CSI結(jié)構(gòu)SOCKET_ENODATA沒(méi)有可用的數(shù)據(jù)SOCKET_ENODEV 沒(méi)有這樣的驅(qū)動(dòng)SOCKET_ENOENT沒(méi)有這樣的文件或目錄SOCKET_ENOLCK沒(méi)有可用的記錄鎖SOCKET_ENOLINK已經(jīng)有的服務(wù)的連接SOCKET_ENOMEDIUM沒(méi)有媒介被找到SOCKET_ENOMEM 不能分配內(nèi)存SOCKET_ENOMSG沒(méi)有指定的消息類(lèi)型SOCKET_ENONET 設(shè)備不在網(wǎng)絡(luò)上SOCKET_ENOPROTOOPT協(xié)議不可用SOCKET_ENOSPC 沒(méi)有空間在驅(qū)動(dòng)器SOCKET_ENOSR超出的流資源SOCKET_ENOSTR 驅(qū)動(dòng)不是一個(gè)流SOCKET_ENOSYS函數(shù)沒(méi)有執(zhí)行SOCKET_ENOTBLK塊驅(qū)動(dòng)是必須的SOCKET_ENOTCONN傳輸終端沒(méi)有連接SOCKET_ENOTDIR沒(méi)有一個(gè)目錄SOCKET_ENOTEMPTY目錄為空SOCKET_ENOTSOCK Socket操作在一個(gè)非socket上SOCKET_ENOTTY不相符的IO控制器SOCKET_ENOTUNIQ在網(wǎng)絡(luò)上名字不是唯一的SOCKET_ENXIO 沒(méi)有這樣的驅(qū)動(dòng)或地址SOCKET_EOPNOTSUPP 操作不支持SOCKET_EPERM操作不允許SOCKET_EPFNOSUPPORT Protocol family不支持SOCKET_EPIPE失敗的管道SOCKET_EPROTO 協(xié)議錯(cuò)誤SOCKET_EPROTONOSUPPORT協(xié)議不支持SOCKET_EPROTOTYPESocket上協(xié)議錯(cuò)誤的類(lèi)型SOCKET_EREMCHG遠(yuǎn)程地址已改變SOCKET_EREMOTE對(duì)象是遠(yuǎn)程的SOCKET_EREMOTEIO遠(yuǎn)程I/O錯(cuò)誤SOCKET_ERESTART 中斷的系統(tǒng)調(diào)用將要重新開(kāi)始SOCKET_EROFS文件系統(tǒng)為只讀SOCKET_ESHUTDOWN.傳輸端點(diǎn)中斷不能發(fā)送SOCKET_ESOCKTNOSUPPORT Socket類(lèi)型不支持SOCKET_ESPIPE不合法的檢索SOCKET_ESTRPIPE流管道錯(cuò)誤SOCKET_ETIME定時(shí)器到時(shí)SOCKET_ETIMEDOUT 連接超時(shí)SOCKET_ETOOMANYREFS太多連接無(wú)法結(jié)合SOCKET_EUNATCH無(wú)法附加協(xié)議驅(qū)動(dòng)SOCKET_EUSERS太多用戶(hù)SOCKET_EWOULDBLOCK 資源暫時(shí)無(wú)法獲得SOCKET_EXDEV無(wú)效的交叉驅(qū)動(dòng)連接SOCKET_EXFULL 交換已滿(mǎn)

boolean socket_listen(resource socket, integer backlog)這個(gè)socket_listen函數(shù)等待從客戶(hù)端過(guò)來(lái)的連接,backlog參數(shù)設(shè)置允許最多等待連接的隊(duì)列數(shù)。string socket_read(resource socket, integer length, integer type)socket_read函數(shù)從特定的socket中讀取指定的字節(jié),如果錯(cuò)誤返回false。缺省下,是采用二進(jìn)制安全的讀取模式。你可以外在的設(shè)置type參數(shù)為PHP_BINARY_READ來(lái)改變讀取模式。你也可以把type設(shè)置為PHP_NORMAL_READ。boolean socket_readv(resource socket, resource iovector)socket_readv函數(shù)把讀取的數(shù)據(jù)插入到iovector資源中。integer socket_recv(resource socket, string buffer, integer length, integer flags)socket_recv函數(shù)讀取數(shù)據(jù)插入到緩沖中。Length參數(shù)設(shè)置最多讀取的字節(jié)數(shù),flag參數(shù)可以使用MSG_OOB或MSG_PEEK。函數(shù)返回讀取的字節(jié)數(shù)。integer socket_recvfrom(resource socket, string buffer, integer length, string host, integer port)socket_frcvfrom函數(shù)讀取數(shù)據(jù)插入到緩存中。Length參數(shù)設(shè)置獲取最多允許接受的字節(jié)數(shù)。設(shè)置flags參數(shù)可以為MSG_OOB 或 MSG_PEEK。PHP設(shè)置主機(jī)和端口參數(shù)適當(dāng)?shù)闹的軌颢@取從主機(jī)發(fā)出的數(shù)據(jù)。boolean socket_recvmsg(resource socket, resource iovector, array control, integer length, integer flags, string host, integer port)socket_recvmsg函數(shù)從socket中讀取數(shù)據(jù)并且插入到一個(gè)I/O向量資源中。PHP設(shè)置control參數(shù)是一個(gè)具有三個(gè)元素的聯(lián)合數(shù)組:cmsg_level, cmsg_type, 和 cmsg_data。Length參數(shù)是一個(gè)附加在數(shù)據(jù)中的關(guān)于獲取數(shù)據(jù)的長(zhǎng)度參數(shù)。Flags參數(shù)是設(shè)置允許值和返回值。在寫(xiě)的時(shí)間,PHP無(wú)法執(zhí)行所有的輸出常量。PHP設(shè)置host和port參數(shù)適當(dāng)?shù)闹凳菫榱双@取從遠(yuǎn)程主機(jī)中發(fā)送的數(shù)據(jù)。(Socket_slect函數(shù)沒(méi)有翻譯,因?yàn)榕略~不達(dá)意)integer socket_select(array read, array write, array exception, integer timeout_seconds, integer timeout_microseconds)The socket_select function waits for changes to sockets. PHP watches the sockets given in the read array for new data coming in. PHP watches the streams given in the write array for being ready to accept more data. PHP watches the streams given in the exception argument for errors. If the number of seconds specified in the timeout_seconds argument passes, the function returns. Use the optional timeout_microseconds argument to specify a timeout less than 1 second.The socket_select function returns the number of sockets that changed or FALSE if an error occurred. If the call timed out, this function returns zero. It also modifies the given arrays so that they include only those sockets that changed.If you have no sockets of a particular type to watch, you may pass an empty array or a variable set to NULL.integer socket_send(resource socket, string buffer, integer length, integer flags)socket_send函數(shù)把寫(xiě)數(shù)據(jù)到緩沖中,然后插入到連接中。你必須指定一個(gè)緩沖最大可寫(xiě)字節(jié)數(shù)。你同樣可以設(shè)置flags參數(shù)為空,或者為下面聯(lián)合常量中的一個(gè):MSG_DONTROUTE和 MSG_OOB。函數(shù)結(jié)束返回已經(jīng)寫(xiě)的字節(jié)數(shù),失敗返回false。boolean socket_sendmsg(resource socket, resource iovector, integer flags, string address, integer port)socket_sendmsg嘗試發(fā)送數(shù)據(jù)到一個(gè)socket。它適合無(wú)連接的socket。Iovector參數(shù)是一個(gè)通過(guò) socket_iovec_alloc函數(shù)產(chǎn)生的資源。你必須指定flags參數(shù)為:NULL, MSG_DONTROUTE, MSG_OOB,或者是兩個(gè)聯(lián)合常量。你應(yīng)當(dāng)指定一個(gè)地址和一個(gè)Internet請(qǐng)求的端口。Socket_sendmsg函數(shù)發(fā)送數(shù)據(jù)返回true,但是不能保證數(shù)據(jù)一定到達(dá)。integer socket_sendto(resource socket, string buffer, integer length, integer flags, string address, integer port)socket_sendto函數(shù)嘗試寫(xiě)數(shù)據(jù)到buffer緩沖中,并且發(fā)送給一個(gè)socket。它適合大部分無(wú)連接的socket。你必須指定 flags為:NULL,MSG_DONTROUTE,MSG_OOB或者是一個(gè)兩個(gè)聯(lián)合常量。你還應(yīng)但指定地址和一個(gè)請(qǐng)求的端口。Socket_sendto函數(shù)數(shù)據(jù)發(fā)送出去返回true,但是不能保證數(shù)據(jù)一定到達(dá)。

boolean socket_set_block(resource socket)socket_set_block函數(shù)設(shè)置socket插入到一個(gè)塊模式中,這是缺省模式。在塊模式中,I/O操作正對(duì)于一個(gè)完成的請(qǐng)求。boolean socket_set_nonblock(resource socket)socket_set_nonblock函數(shù)設(shè)置socket插入到意個(gè)非塊模式中。在非塊模式中,I/O操作馬上返回,即使沒(méi)有數(shù)據(jù)。boolean socket_set_option(resource socket, integer level, integer option, integer value)socket_set_option函數(shù)給socket設(shè)置一個(gè)選項(xiàng)。Level參數(shù)設(shè)置一個(gè)標(biāo)志級(jí)別的常量。有效的值包括:SOL_SOCKET, SOL_TCP和SOL_UDP。Option參數(shù)必須匹配文章上面的Socket選項(xiàng)表中的常量。boolean socket_shutdown(resource socket, integer how)socket_shutdown函數(shù)關(guān)閉一個(gè)關(guān)于I/O的socket。設(shè)置how為0則中止接受數(shù)據(jù),設(shè)置為1則停止發(fā)送數(shù)據(jù),設(shè)置為2則中止二者操作。string socket_strerror(integer error)socket_strerror函數(shù)返回一個(gè)錯(cuò)誤號(hào)的詳細(xì)錯(cuò)誤信息。integer socket_write(resource socket, string buffer, integer length)socket_write函數(shù)寫(xiě)數(shù)據(jù)到buffer緩沖中然后輸出到socket中。你可以指定length參數(shù)來(lái)指定緩沖的最大字節(jié)數(shù)。這個(gè)函數(shù)通常情況下比socket_send更方便。boolean socket_writev(resource socket, resource iovector)socket_writev函數(shù)通過(guò)I/O向量寫(xiě)數(shù)據(jù)到一個(gè)socket中。

標(biāo)簽: PHP
主站蜘蛛池模板: 国产肥老妇视频一 | 久草在现视频 | 三级网址在线观看 | 在线视频免费国产成人 | 欧美大屁股精品毛片视频 | 欧美成人aa | 国产精品视频网址 | 手机免费看毛片 | 国产四区| 97视频在线看 | 日韩美女视频在线观看 | 天天爱天天做天天爽天天躁 | 日韩一区二区在线视频 | 国产一区亚洲二区 | 手机看片免费基地 | 国产小片 | 大学生一级一片第一次欧美 | 萌白酱喷水福利视频在线 | 亚洲综合影视 | 三级黄网站 | 男人女人真曰批视频播放 | 久久高清免费视频 | 免费看一级毛片欧美 | 成人免费视频网站 | 理论视频在线观看 | 手机看福利片 | a毛片视频| 日韩一级高清 | 性亚洲精品 | 久久免费视屏 | 欧美日韩成人午夜免费 | 国产三级在线观看a | 亚洲精品影院久久久久久 | 美女视频免费永久观看的 | 亚洲国产片在线观看 | 一品道一本香蕉视频 | 国产精品高清免费网站 | 国产综合久久久久影院 | 孕妇一级片 | 在线播放一区二区精品产 | 国产日韩精品一区二区在线观看 |