成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

PHP的Socket函數(shù)參考

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

這些Socket函數(shù)直接跟互聯(lián)網(wǎng)的協(xié)議進(jìn)行發(fā)送信息。相對于fopensock的流來講,他們操作在一個(gè)比較底層的級別。通常,他們都是對C 函數(shù)進(jìn)行封裝,并且名稱都類似。如果你有使用C進(jìn)行socket編程的經(jīng)驗(yàn),那么使用這些函數(shù)將是非常熟練的。我們這里不討論特別詳細(xì)的socket編程。使用這些函數(shù)能夠解決高層級別函數(shù)所不能解決的難題。使用這些函數(shù)能夠?qū)崿F(xiàn)類似fopen的功能,你也許有很多方法來實(shí)現(xiàn)socket的功能,比如在PHP中使用CLI(Command-line Interface)來實(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)聽一個(gè)端口。在塊模式中,socket_accept將產(chǎn)生一個(gè)唯一接受后的連接。在非塊模式中,它沒有建立連接則返回false。另外,當(dāng)你有了一個(gè)新的socket資源后就能夠進(jìn)行讀寫操作。下面我們將示范一個(gè)簡單的回顯服務(wù)器端。它運(yùn)行在CLI(命令行)下面,它在12345端口等待客戶端的連接。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ò)誤,如果沒有指定參數(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è)客戶端到一個(gè)端口或者socket的連接。你必須提供一個(gè)由socket_create產(chǎn)生的socket。這個(gè)address參數(shù)必須到一個(gè)socket的路徑或者是一個(gè)IP地址。如果是后者,還必須跟一個(gè)數(shù)字的端口號。下面例子演示了使用UDP協(xié)議的連接到游戲服務(wù)器然后獲取信息的過程。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來指定一個(gè)Internet連接,或者使用AF_UNIX來指定一個(gè)Unix socket連接。第二個(gè)參數(shù)是一個(gè)socket的類型,你可以從下面的表中選擇。一般情況下,使用SOCK_STREAM來使用TCP協(xié)議,UDP協(xié)議使用SOCK_DGRAM。第三個(gè)參數(shù)指定為一個(gè)協(xié)議。使用SOL_TCP或SOL_UDP來分別對應(yīng)TCP和UDP協(xié)議。還有一個(gè)選擇是你能夠使用 getprotobyname函數(shù)來處理。Socket 類型常量 描述SOCK_DGRAM 自動尋址數(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更簡單的產(chǎn)生一個(gè)socket進(jìn)行監(jiān)聽。這個(gè)產(chǎn)生的socket將監(jiān)聽指定的端口,后面可選的參數(shù)backlog是設(shè)置允許最大的連接數(shù)。boolean socket_create_pair(integer family, integer socket_type, integer protocol, array handles)socket_create_pair函數(shù)產(chǎn)生一對socket連接。首先前三個(gè)參數(shù)是對一個(gè)socket_create的描述,這個(gè)handles參數(shù)是一個(gè)包含兩個(gè)socket資源的數(shù)組。該函數(shù)是對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è)等級。這個(gè)獲取的socket級別,可以使用SOL_SOCKET來確定這個(gè)級別參數(shù)。另外,使用協(xié)議,比如象SOL_TCP來表示一個(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 允許自動尋址的socket發(fā)送和接受廣播包SO_DEBUG 打開socket調(diào)試功能,只有root才有權(quán)限打開該選項(xiàng)SO_DONTROUTE 不接受路由包通過網(wǎng)關(guān)SO_ERROR 獲取并且清除最后一次的socket錯(cuò)誤,這個(gè)選項(xiàng)也許不用設(shè)置SO_KEEPALIVE 打開保持激活狀態(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 延遲通過接受一個(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ā)送通過一個(gè)時(shí)間。該選項(xiàng)使用數(shù)組的鍵值:sec和usecSO_TYPE 獲取socket的類型,該選項(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ù)來獲取詳細(xì)的錯(cuò)誤。使用 socket_clear_error函數(shù)清除socket的錯(cuò)誤。Socket錯(cuò)誤代碼表常量描述SOCKET_E2BIG 參數(shù)列表太長SOCKET_EACCES沒有許可權(quán)限SOCKET_EADDRINUSE地址已經(jīng)被使用SOCKET_EADDRNOTAVAIL不能解析請求的地址SOCKET_EADV廣播(廣告)錯(cuò)誤SOCKET_EAFNOSUPPORTAddress family不支持的協(xié)議SOCKET_EAGAIN資源暫時(shí)不能獲得SOCKET_EALREADY 操作已經(jīng)在執(zhí)行SOCKET_EBADE 無效的交換SOCKET_EBADF錯(cuò)誤的文件描述符SOCKET_EBADFD文件描述符錯(cuò)誤的狀態(tài)SOCKET_EBADMSG錯(cuò)誤的消息SOCKET_EBADR無效的請求描述SOCKET_EBADRQC 無效的請求代碼SOCKET_EBADSLT無效的操作位置SOCKET_EBUSY驅(qū)動或資源繁忙SOCKET_ECHRNG 信道號碼超出范圍SOCKET_ECOMM發(fā)送通訊錯(cuò)誤SOCKET_ECONNABORTED軟件原因?qū)е峦ㄐ兄袛郤OCKET_ECONNREFUSED連接被拒絕SOCKET_ECONNRESET連接被相同的socket重置SOCKET_EDESTADDRREQ必須需要目標(biāo)地址SOCKET_EDQUOT 超出磁盤配額SOCKET_EEXIST 文件已存在SOCKET_EFAULT 錯(cuò)誤的地址SOCKET_EHOSTDOWN主機(jī)已關(guān)閉SOCKET_EHOSTUNREACH沒有路由到主機(jī)SOCKET_EIDRM表示ID被刪除SOCKET_EINPROGRESS操作正在執(zhí)行SOCKET_EINTR系統(tǒng)調(diào)用被阻止SOCKET_EINVAL無效的參數(shù)SOCKET_EIO輸入/ 輸出錯(cuò)誤SOCKET_EISCONN傳輸終端已經(jīng)連接SOCKET_EISDIR 是一個(gè)目錄SOCKET_EISNAM是一個(gè)指定的類型文件SOCKET_EL2HLT級別2已中止SOCKET_EL2NSYNC級別2不同步SOCKET_EL3HLT級別3已中止SOCKET_EL3RST級別3被重置SOCKET_ELNRNG 連接號超出范圍SOCKET_ELOOP太多級別的符號連接SOCKET_EMEDIUMTYPE錯(cuò)誤的媒介類型(中間類型)SOCKET_EMFILE太多打開的文件SOCKET_EMLINK 太多的連接SOCKET_EMSGSIZE消息太長SOCKET_EMULTIHOP嘗試次數(shù)太多SOCKET_ENAMETOOLONG文件名太長SOCKET_ENETDOWN; 網(wǎng)絡(luò)已關(guān)閉SOCKET_ENETRESET; 網(wǎng)絡(luò)中斷,連接被重置SOCKET_ENETUNREACH網(wǎng)絡(luò)不可達(dá)SOCKET_ENFILE系統(tǒng)中太多打開的文件SOCKET_ENOANO 沒有正極SOCKET_ENOBUFS沒有可用的緩存空間SOCKET_ENOCSI沒有可用的CSI結(jié)構(gòu)SOCKET_ENODATA沒有可用的數(shù)據(jù)SOCKET_ENODEV 沒有這樣的驅(qū)動SOCKET_ENOENT沒有這樣的文件或目錄SOCKET_ENOLCK沒有可用的記錄鎖SOCKET_ENOLINK已經(jīng)有的服務(wù)的連接SOCKET_ENOMEDIUM沒有媒介被找到SOCKET_ENOMEM 不能分配內(nèi)存SOCKET_ENOMSG沒有指定的消息類型SOCKET_ENONET 設(shè)備不在網(wǎng)絡(luò)上SOCKET_ENOPROTOOPT協(xié)議不可用SOCKET_ENOSPC 沒有空間在驅(qū)動器SOCKET_ENOSR超出的流資源SOCKET_ENOSTR 驅(qū)動不是一個(gè)流SOCKET_ENOSYS函數(shù)沒有執(zhí)行SOCKET_ENOTBLK塊驅(qū)動是必須的SOCKET_ENOTCONN傳輸終端沒有連接SOCKET_ENOTDIR沒有一個(gè)目錄SOCKET_ENOTEMPTY目錄為空SOCKET_ENOTSOCK Socket操作在一個(gè)非socket上SOCKET_ENOTTY不相符的IO控制器SOCKET_ENOTUNIQ在網(wǎng)絡(luò)上名字不是唯一的SOCKET_ENXIO 沒有這樣的驅(qū)動或地址SOCKET_EOPNOTSUPP 操作不支持SOCKET_EPERM操作不允許SOCKET_EPFNOSUPPORT Protocol family不支持SOCKET_EPIPE失敗的管道SOCKET_EPROTO 協(xié)議錯(cuò)誤SOCKET_EPROTONOSUPPORT協(xié)議不支持SOCKET_EPROTOTYPESocket上協(xié)議錯(cuò)誤的類型SOCKET_EREMCHG遠(yuǎn)程地址已改變SOCKET_EREMOTE對象是遠(yuǎn)程的SOCKET_EREMOTEIO遠(yuǎn)程I/O錯(cuò)誤SOCKET_ERESTART 中斷的系統(tǒng)調(diào)用將要重新開始SOCKET_EROFS文件系統(tǒng)為只讀SOCKET_ESHUTDOWN.傳輸端點(diǎn)中斷不能發(fā)送SOCKET_ESOCKTNOSUPPORT Socket類型不支持SOCKET_ESPIPE不合法的檢索SOCKET_ESTRPIPE流管道錯(cuò)誤SOCKET_ETIME定時(shí)器到時(shí)SOCKET_ETIMEDOUT 連接超時(shí)SOCKET_ETOOMANYREFS太多連接無法結(jié)合SOCKET_EUNATCH無法附加協(xié)議驅(qū)動SOCKET_EUSERS太多用戶SOCKET_EWOULDBLOCK 資源暫時(shí)無法獲得SOCKET_EXDEV無效的交叉驅(qū)動連接SOCKET_EXFULL 交換已滿

boolean socket_listen(resource socket, integer backlog)這個(gè)socket_listen函數(shù)等待從客戶端過來的連接,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來改變讀取模式。你也可以把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ù)的長度參數(shù)。Flags參數(shù)是設(shè)置允許值和返回值。在寫的時(shí)間,PHP無法執(zhí)行所有的輸出常量。PHP設(shè)置host和port參數(shù)適當(dāng)?shù)闹凳菫榱双@取從遠(yuǎn)程主機(jī)中發(fā)送的數(shù)據(jù)。(Socket_slect函數(shù)沒有翻譯,因?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ù)把寫數(shù)據(jù)到緩沖中,然后插入到連接中。你必須指定一個(gè)緩沖最大可寫字節(jié)數(shù)。你同樣可以設(shè)置flags參數(shù)為空,或者為下面聯(lián)合常量中的一個(gè):MSG_DONTROUTE和 MSG_OOB。函數(shù)結(jié)束返回已經(jīng)寫的字節(jié)數(shù),失敗返回false。boolean socket_sendmsg(resource socket, resource iovector, integer flags, string address, integer port)socket_sendmsg嘗試發(fā)送數(shù)據(jù)到一個(gè)socket。它適合無連接的socket。Iovector參數(shù)是一個(gè)通過 socket_iovec_alloc函數(shù)產(chǎn)生的資源。你必須指定flags參數(shù)為:NULL, MSG_DONTROUTE, MSG_OOB,或者是兩個(gè)聯(lián)合常量。你應(yīng)當(dāng)指定一個(gè)地址和一個(gè)Internet請求的端口。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ù)嘗試寫數(shù)據(jù)到buffer緩沖中,并且發(fā)送給一個(gè)socket。它適合大部分無連接的socket。你必須指定 flags為:NULL,MSG_DONTROUTE,MSG_OOB或者是一個(gè)兩個(gè)聯(lián)合常量。你還應(yīng)但指定地址和一個(gè)請求的端口。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操作正對于一個(gè)完成的請求。boolean socket_set_nonblock(resource socket)socket_set_nonblock函數(shù)設(shè)置socket插入到意個(gè)非塊模式中。在非塊模式中,I/O操作馬上返回,即使沒有數(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)志級別的常量。有效的值包括: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ò)誤號的詳細(xì)錯(cuò)誤信息。integer socket_write(resource socket, string buffer, integer length)socket_write函數(shù)寫數(shù)據(jù)到buffer緩沖中然后輸出到socket中。你可以指定length參數(shù)來指定緩沖的最大字節(jié)數(shù)。這個(gè)函數(shù)通常情況下比socket_send更方便。boolean socket_writev(resource socket, resource iovector)socket_writev函數(shù)通過I/O向量寫數(shù)據(jù)到一個(gè)socket中。

標(biāo)簽: PHP
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
一区二区三区你懂的| 噜噜噜91成人网| 国内一区二区三区在线视频| 欧美日韩免费电影| 亚洲高清在线精品| 伊人久久大香线蕉综合热线| 精品国精品国产| 精品影视av免费| 亚洲欧美网站| 亚洲裸体xxx| 欧美在线精品一区| 精品理论电影在线观看 | 久久亚洲捆绑美女| 麻豆精品视频在线观看视频| 麻豆成人精品| 亚洲最大成人综合| 激情丁香综合| 欧美国产一区二区| 成人av资源站| 日韩三级免费观看| 国产精品一卡二卡| 88在线观看91蜜桃国自产| 久久99精品视频| 色噜噜狠狠成人网p站| 亚洲欧洲综合另类| 精品999在线观看| 亚洲国产精品国自产拍av| 91网站最新网址| 日韩美女在线视频| 大陆成人av片| 日韩女优电影在线观看| 成人高清av在线| 精品奇米国产一区二区三区| 国产aⅴ综合色| 日韩一级高清毛片| 国产91对白在线观看九色| 欧美一区二区三区精品| 国产乱码精品一区二区三区av| 欧美日韩在线播放一区| 久久精品噜噜噜成人av农村| 欧美自拍偷拍一区| 久久精品国产久精国产爱| 久久久亚洲一区| 亚洲va韩国va欧美va| 国产日韩高清一区二区三区在线| 亚洲卡通动漫在线| 亚洲综合丁香婷婷六月香| 99国产精品视频免费观看一公开| 亚洲色图第一区| 国产伦精品一区二区三区视频孕妇| 亚洲国产cao| 在线精品视频一区二区三四| 裸体健美xxxx欧美裸体表演| 欧美无砖砖区免费| 国产乱码一区二区三区| 欧美成人欧美edvon| 女同一区二区| 一区二区三区中文字幕精品精品| 香蕉亚洲视频| 午夜精品爽啪视频| 欧美午夜精品久久久久久孕妇| 国产一区二区免费视频| 精品欧美乱码久久久久久1区2区| 欧美激情第二页| 亚洲久本草在线中文字幕| 国产精品免费在线| 久久国产精品露脸对白| 欧美精品亚洲二区| 国产传媒久久文化传媒| 2021中文字幕一区亚洲| 欧美日韩无遮挡| 性久久久久久久久| 欧美疯狂性受xxxxx喷水图片| 成人毛片在线观看| 久久精品欧美日韩| 日韩午夜电影| 裸体健美xxxx欧美裸体表演| 精品国产乱码久久久久久蜜臀 | 一区二区三区精品久久久| 欧美精品久久一区| 国产精品观看| 久久精品国产精品青草| 国产欧美日韩不卡免费| 美日韩在线观看| 94-欧美-setu| 首页亚洲欧美制服丝腿| 精品久久久久av影院| 亚洲影院免费| 9l国产精品久久久久麻豆| 尤物在线观看一区| 日韩午夜电影在线观看| 国产精品久久777777毛茸茸| 国产精品一区二区果冻传媒| 亚洲欧美一区二区三区久本道91| 在线观看国产91| 欧美日韩另类综合| 免费观看日韩电影| 日韩欧美国产不卡| 亚洲免费激情| 粉嫩aⅴ一区二区三区四区| 欧美成人三级在线| 黄色一区三区| 亚洲午夜久久久久久久久电影网| 精品福利二区三区| 在线日韩中文| 肉肉av福利一精品导航| 制服丝袜日韩国产| 欧美日韩国产免费观看 | 蜜桃av一区| 国产精品影音先锋| 国产精品乱码一区二三区小蝌蚪| 免费看亚洲片| 国产经典欧美精品| 久久久久88色偷偷免费| 欧洲一区在线电影| 91丨porny丨国产入口| 一区二区三区 在线观看视频| 91成人免费在线视频| www.一区二区| 一区二区中文视频| 日韩精品一区在线| 亚洲高清二区| 国内成人自拍视频| 国产精品免费免费| 欧美专区亚洲专区| 国产精品久久久久久久久久妞妞| 久久国产精品99精品国产| 久久久99久久精品欧美| 一本色道精品久久一区二区三区| 久久精品国产精品亚洲综合| 国产亚洲一本大道中文在线| 亚洲毛片一区| 91麻豆免费观看| 日韩国产欧美一区二区三区| 欧美tickling网站挠脚心| 国产精品尤物| 成人h版在线观看| 天天影视网天天综合色在线播放| 亚洲色图在线视频| 欧美疯狂性受xxxxx喷水图片| 最新成人av网站| 国产成人av电影免费在线观看| 亚洲人成在线观看一区二区| 欧美日韩大陆在线| 鲁大师影院一区二区三区| 成人一区二区三区在线观看| 亚洲色欲色欲www在线观看| 91精品在线一区二区| 国产欧美日韩| 成人黄色片在线观看| 美女在线观看视频一区二区| 中文字幕国产一区二区| 欧美性一二三区| 亚洲日本激情| 不卡一区二区三区四区| 日韩在线一二三区| 一区二区三区在线观看国产| 亚洲精品在线电影| 91成人免费在线视频| 亚洲性图久久| 国产精品18久久久| 一区二区三区在线视频免费| 精品毛片乱码1区2区3区| 日韩三级伦理片妻子的秘密按摩| 媚黑女一区二区| 一色屋精品视频在线观看网站| 国产91精品在线观看| 亚洲v中文字幕| 国产视频不卡一区| 2021久久国产精品不只是精品| 久久久久欧美精品| 合欧美一区二区三区| 国产成人av影院| 一区二区三区在线视频播放| 久久久国产精品午夜一区ai换脸 | 在线看国产日韩| 色吧成人激情小说| 亚洲精品偷拍| 91免费版在线| 国产成a人亚洲精| 伦理电影国产精品| 精品国产乱码久久久久久图片| 制服丝袜亚洲精品中文字幕| 久久久久中文| 国产欧美日韩伦理| 国内精品福利| 92精品国产成人观看免费| 成人美女视频在线观看| 国产一区二区不卡| 青青草精品视频| 亚洲国产成人91porn| 亚洲日本电影在线| 亚洲精品中文字幕在线观看| 欧美激情一区二区| 欧美精品一区二区三区蜜桃| 91精品在线免费| 欧美日韩亚洲综合| 日韩欧美精品在线| 欧美丰满少妇xxxxx高潮对白| 色老汉一区二区三区|