ฟังก์ชั่นซ็อกเก็ตเหล่านี้สื่อสารโดยตรงกับอินเทอร์เน็ตโปรโตคอลเพื่อส่งข้อมูล เมื่อเปรียบเทียบกับลำธารของ fopensock พวกมันทำงานในระดับที่ค่อนข้างต่ำ โดยปกติแล้วจะสรุปฟังก์ชัน C และมีชื่อคล้ายกัน หากคุณมีประสบการณ์กับการเขียนโปรแกรมซ็อกเก็ตในภาษา C คุณจะรู้สึกสบายใจมากในการใช้ฟังก์ชันเหล่านี้ เราจะไม่พูดถึงการเขียนโปรแกรมซ็อกเก็ตโดยละเอียดที่นี่
ใช้ฟังก์ชันเหล่านี้เพื่อแก้ไขปัญหายากๆ ที่ฟังก์ชันระดับสูงไม่สามารถทำได้ การใช้ฟังก์ชันเหล่านี้สามารถบรรลุฟังก์ชันที่คล้ายกับ fopen คุณอาจมีหลายวิธีในการใช้ฟังก์ชันซ็อกเก็ต เช่น Internet daemon ที่ใช้งานโดยใช้ CLI (Command-line Interface) ใน PHP
ทรัพยากร socket_accept (ซ็อกเก็ตทรัพยากร)
ในฝั่งเซิร์ฟเวอร์ของสคริปต์ของคุณ ให้ใช้ socket_accept เพื่อยอมรับการเชื่อมต่อขาเข้า คุณต้องสร้างซ็อกเก็ตก่อน ผูกเข้ากับชื่อ และตั้งค่าให้ฟังบนพอร์ต ในโหมดบล็อก socket_accept จะสร้างการเชื่อมต่อที่ยอมรับเฉพาะ ในโหมดไม่บล็อก จะส่งคืนค่าเท็จหากไม่มีการสร้างการเชื่อมต่อ นอกจากนี้ เมื่อคุณมีทรัพยากรซ็อกเก็ตใหม่ คุณสามารถดำเนินการอ่านและเขียนได้
ด้านล่างนี้เราจะสาธิตเซิร์ฟเวอร์ echo อย่างง่าย มันทำงานภายใต้ CLI (บรรทัดคำสั่ง) และรอการเชื่อมต่อไคลเอนต์บนพอร์ต 12345
socket_accept
<?php
set_time_limit (0);
//สร้างซ็อกเก็ต
ถ้า(($socket = socket_create(AF_INET, SOCK_STREAM, 0)) < 0){
print("ไม่สามารถสร้างซ็อกเก็ต: " . socket_strerror(socket_last_error()) . "n");
-
//ผูกเข้ากับที่อยู่และพอร์ตที่กำหนด
if(($error = socket_bind($socket, gethostbyname($_SERVER['HOSTNAME']), 12345)) < 0){
print("ไม่สามารถผูกซ็อกเก็ต: " . socket_strerror(socket_last_error()) . "n");
-
if(($error = socket_listen($socket, 5)) < 0){
print("ไม่สามารถแสดงรายการบนซ็อกเก็ต: " .
socket_strerror(socket_last_error()) . "n");
-
ในขณะที่(จริง){
//รอการเชื่อมต่อ
ถ้า(($accept = socket_accept($socket)) < 0){
print("เกิดข้อผิดพลาดขณะอ่าน: " . socket_strerror($message) . "n");
หยุดพัก;
-
//ส่งข้อความต้อนรับ
socket_write($accept, "การเชื่อมต่อที่ยอมรับn");
print(date('Ymd H:i:s') . " สถานะ: ยอมรับการเชื่อมต่อแล้วn");
ob_flush();
ในขณะที่(จริง){
//อ่านบรรทัดจากไคลเอนต์
ถ้า(FALSE === ($line = socket_read($accept, 1024))){
print("ไม่สามารถอ่านจากซ็อกเก็ต: " .
socket_strerror(socket_last_error()) . "n");
พัก 2;
-
if( !@socket_write($accept , "ECHO: $line")){
print(date('Ymd H:i:s') . " สถานะ: การเชื่อมต่อถูกขัดจังหวะn");
หยุดพัก;
-
print(date('Ymd H:i:s') . " อ่าน: $line");
ob_flush();
-
socket_close($ยอมรับ);
-
?>
bool socket_bind (ซ็อกเก็ตทรัพยากร, ที่อยู่สตริง, พอร์ตจำนวนเต็ม)
socket_bind() นี้ผูกทรัพยากรซ็อกเก็ตเข้ากับที่อยู่ ซ็อกเก็ตนี้จะต้องเป็นทรัพยากรที่ส่งคืนโดยฟังก์ชัน socket_create() ที่อยู่นี้ต้องเป็นที่อยู่ IP หรือเส้นทางไปยังซ็อกเก็ต Unix หากเป็นซ็อกเก็ตที่ทำงานบนอินเทอร์เน็ต คุณต้องจัดเตรียมพอร์ตด้วย
socket_clear_error (ซ็อกเก็ตทรัพยากร)
ฟังก์ชันนี้สามารถล้างข้อผิดพลาดสำหรับซ็อกเก็ตที่ระบุได้ หากไม่มีการระบุพารามิเตอร์ ข้อผิดพลาดของซ็อกเก็ตทั้งหมดจะถูกล้าง
socket_close (ซ็อกเก็ตทรัพยากร)
ฟังก์ชัน socket_close ปิดซ็อกเก็ตและล้างทรัพยากรหน่วยความจำที่ซ็อกเก็ตครอบครอง
บูลีน socket_connect (ซ็อกเก็ตทรัพยากร ที่อยู่สตริง พอร์ตจำนวนเต็ม)
ฟังก์ชันนี้สร้างการเชื่อมต่อไคลเอนต์กับพอร์ตหรือซ็อกเก็ต คุณต้องระบุซ็อกเก็ตที่สร้างโดย socket_create พารามิเตอร์ที่อยู่จะต้องเป็นเส้นทางไปยังซ็อกเก็ตหรือที่อยู่ IP หากเป็นอย่างหลัง จะต้องตามด้วยหมายเลขพอร์ตที่เป็นตัวเลขด้วย
ตัวอย่างต่อไปนี้สาธิตกระบวนการเชื่อมต่อกับเซิร์ฟเวอร์เกมและรับข้อมูลโดยใช้โปรโตคอล UDP
ซ็อกเก็ต_เชื่อมต่อ
<?php
//สร้างซ็อกเก็ต UDP
ถ้า(($socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) < 0){
print("ไม่สามารถสร้างซ็อกเก็ต: " .
socket_strerror(socket_last_error()) .
-
//หมดเวลาหลังจาก 5 วินาที
socket_set_option($ซ็อกเก็ต, SOL_SOCKET,
SO_RCVTIMEO, อาร์เรย์('sec'=>5,'usec'=>0));
//เชื่อมต่อกับเซิร์ฟเวอร์หลัก RtCW
if(!socket_connect($socket, 'wolfmaster.idsoftware.com', 27950)){
print("ไม่สามารถเชื่อมต่อ: " .
socket_strerror(socket_last_error()) . "n");
-
//ส่งคำขอไปยังเซิร์ฟเวอร์
socket_write($socket, "xFFxFFxFFxFFgetserversx00");
//รับเซิร์ฟเวอร์
$เซิร์ฟเวอร์ = อาร์เรย์();
ในขณะที่(FALSE !== ($line = @socket_read($socket, 4096))){
//แยกวิเคราะห์ข้อมูล
สำหรับ($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));
$พอร์ต = (ord(substr($line, $i+5, 1)) * 256) +
ord(substr($line, $i+6, 1));
$เซิร์ฟเวอร์[] = array('ip'=>$ip, 'พอร์ต'=>$พอร์ต);
-
-
print("<h1>" . count($server) . " เซิร์ฟเวอร์</h1>n");
//วนซ้ำเซิร์ฟเวอร์เพื่อรับสถานะ
foreach($เซิร์ฟเวอร์เป็น $s){
พิมพ์("<h1>{$s['ip']}:{$s['พอร์ต']}</h1>n");
//เชื่อมต่อกับเซิร์ฟเวอร์ RtCW
if(!socket_connect($socket, $s['ip'], $s['พอร์ต'])){
พิมพ์("<p>n" .
socket_strerror(socket_last_error()) .
"n</p>n");
ดำเนินการต่อ;
-
//ส่งคำขอสถานะ
socket_write($socket, "xFFxFFxFFxFFgetstatusx00");
// รับสถานะจากเซิร์ฟเวอร์
ถ้า (FALSE === ($line = @socket_read($socket, 1024))){
พิมพ์("<p>n" .
socket_strerror(socket_last_error()) .
"n</p>n");
ดำเนินการต่อ;
-
$part = explode("n", $line);
//การตั้งค่าอยู่ในบรรทัดที่สองคั่นด้วยแบ็กสแลช
$setting = explode("\", $part[1]);
พิมพ์("<h2>การกำหนดค่า</h2>n");
พิมพ์("<p>n");
for($s=1; $s < count($setting); $s += 2){
พิมพ์("tt{$setting[$s]} = {$setting[$s+1]}<br>n");
-
พิมพ์("</p>n");
print("<h2>ผู้เล่น</h2>n");
$lastPlayer = จำนวน($ส่วนหนึ่ง) - 1;
สำหรับ($p=2; $p < $lastPlayer; $p++){
$player = explode(" ", $part[$p]);
print("{$player[2]} คะแนน={$player[0]} "
"ปิง={$player[1]}<br>n");
-
พิมพ์("</p>n");
ob_flush();
-
พิมพ์("</table>n");
socket_close($ซ็อกเก็ต);
-
ทรัพยากร socket_create (ตระกูลจำนวนเต็ม, จำนวนเต็ม socket_type, โปรโตคอลจำนวนเต็ม)
socket_create เริ่มต้นโครงสร้างซ็อกเก็ต พารามิเตอร์แรกคือตระกูลโปรโตคอลหรือโดเมน คุณต้องใช้ AF_INET เพื่อระบุการเชื่อมต่ออินเทอร์เน็ต หรือใช้ AF_UNIX เพื่อระบุการเชื่อมต่อซ็อกเก็ต Unix พารามิเตอร์ที่สองคือประเภทซ็อกเก็ตซึ่งคุณสามารถเลือกได้จากตารางด้านล่าง โดยทั่วไป ใช้ SOCK_STREAM เพื่อใช้โปรโตคอล TCP และใช้โปรโตคอล UDP เพื่อใช้ SOCK_DGRAM พารามิเตอร์ที่สามระบุโปรโตคอล ใช้ SOL_TCP หรือ SOL_UDP เพื่อให้สอดคล้องกับโปรโตคอล TCP และ UDP ตามลำดับ อีกทางเลือกหนึ่งคือคุณสามารถใช้ฟังก์ชัน getprotobyname เพื่อจัดการสิ่งนี้ได้
คำอธิบายค่าคงที่ประเภทซ็อกเก็ต
SOCK_DGRAM ระบุซ็อกเก็ตแพ็กเก็ตโดยอัตโนมัติ
SOCK_RAW อินเทอร์เฟซโปรโตคอล RAW
SOCK_RDM การแลกเปลี่ยนข้อความที่เชื่อถือได้
SOCK_SEQPACKET ซ็อกเก็ตแพ็คเก็ตข้อมูลตามลำดับ
ซ็อกเก็ตสตรีม SOCK_STREAM
ทรัพยากร socket_create_listen (พอร์ตจำนวนเต็ม, จำนวนเต็มค้าง)
การใช้ socket_create_listen เป็นวิธีที่ง่ายกว่า socket_create เพื่อสร้างซ็อกเก็ตสำหรับการฟัง ซ็อกเก็ตที่สร้างขึ้นจะฟังพอร์ตที่ระบุ และรายการค้างของพารามิเตอร์เสริมคือการตั้งค่าจำนวนการเชื่อมต่อสูงสุดที่อนุญาต
บูลีน socket_create_pair (ตระกูลจำนวนเต็ม, จำนวนเต็ม socket_type, โปรโตคอลจำนวนเต็ม, ตัวจัดการอาร์เรย์)
ฟังก์ชัน socket_create_pair สร้างคู่ของการเชื่อมต่อซ็อกเก็ต ประการแรก พารามิเตอร์สามตัวแรกคือคำอธิบายของ socket_create พารามิเตอร์ handles คืออาร์เรย์ที่มีทรัพยากรซ็อกเก็ตสองตัว ฟังก์ชันนี้เป็นการห่อหุ้มฟังก์ชัน socketpair ใน C
socket_create_pair
<?php
ถ้า(!socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $socket)){
print("ไม่สามารถสร้างซ็อกเก็ตได้!n");
ออก();
-
$เด็ก = pcntl_fork();
ถ้า($เด็ก == -1){
print("แยกไม่ออก!n");
ออก();
-
elseif($เด็ก > 0){
//พ่อแม่
socket_close($ซ็อกเก็ต[0]);
print("Parent: กำลังรอข้อความn");
$message = socket_read($socket[1], 1024, PHP_NORMAL_READ);
print("ผู้ปกครอง: ได้รับข้อความ --$messagen");
socket_write($socket[1], "สวัสดี กระบวนการลูก!n");
pcntl_waitpid($เด็ก, $สถานะ);
}อื่น{
//เด็ก
socket_close($ซ็อกเก็ต[1]);
socket_write($socket[0], "สวัสดี กระบวนการของผู้ปกครอง!n");
print("Child: กำลังรอข้อความn");
$message = socket_read($socket[0], 1024, PHP_NORMAL_READ);
print("เด็ก: ได้รับข้อความ --$messagen");
ออก(0);
-
-
ค่า socket_get_option (ซ็อกเก็ตทรัพยากร ระดับจำนวนเต็ม ตัวเลือกจำนวนเต็ม)
ฟังก์ชัน socket_get_option ส่งกลับค่าเพิ่มที่แสดงอยู่ในตารางต่อไปนี้ คุณต้องระบุทรัพยากรซ็อกเก็ตที่สร้างโดย socket_create และระดับ ระดับซ็อกเก็ตที่ได้รับนี้สามารถกำหนดได้โดยใช้ SOL_SOCKET หรือใช้โปรโตคอลเช่น SOL_TCP เพื่อแสดงโปรโตคอล TCP ตัวเลือกเหล่านี้อาจถูกตั้งค่าโดย socket_set_option
socket_get_options
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
พิมพ์('SO_BROADCAST:' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_BROADCAST) . "<br>n");
พิมพ์ ('SO_DEBUG: ' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_DEBUG) . "<br>n");
พิมพ์ ('SO_DONTROUTE: ' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_DONTROUTE) . "<br>n");
พิมพ์('SO_ERROR:' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_ERROR) . "<br>n");
พิมพ์ ('SO_KEEPALIVE:' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_KEEPALIVE) . "<br>n");
พิมพ์ ('SO_LINGER: ' .
print_r(socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_LINGER), จริง) . "<br>n");
พิมพ์('SO_OOBINLINE: ' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_OOBINLINE) . "<br>n");
พิมพ์ ('SO_RCVBUF: ' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_RCVBUF) . "<br>n");
พิมพ์('SO_RCVLOWAT:' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_RCVLOWAT) . "<br>n");
พิมพ์('SO_RCVTIMEO: ' .
print_r(socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_RCVTIMEO), จริง) . "<br>n");
พิมพ์('SO_REUSEADDR:' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_REUSEADDR) . "<br>n");
พิมพ์('SO_SNDBUF:' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_SNDBUF) . "<br>n");
พิมพ์('SO_SNDLOWAT:' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_SNDLOWAT) . "<br>n");
พิมพ์ ('SO_SNDTIMEO: ' .
print_r(socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_SNDTIMEO), จริง) . "<br>n");
พิมพ์ ('SO_TYPE: ' .
socket_get_option($ซ็อกเก็ต, SOL_SOCKET,
SO_TYPE) . "<br>n");
?>
คำอธิบายตัวเลือกตารางตัวเลือกซ็อกเก็ต
SO_BROADCAST อนุญาตให้ซ็อกเก็ตที่อยู่โดยอัตโนมัติสามารถส่งและรับแพ็กเก็ตการออกอากาศ
SO_DEBUG เปิดฟังก์ชันการดีบักซ็อกเก็ต เฉพาะรูทเท่านั้นที่มีสิทธิ์เปิดตัวเลือกนี้
SO_DONTROUTE ไม่ยอมรับแพ็กเก็ตเส้นทางผ่านเกตเวย์
SO_ERROR รับและล้างข้อผิดพลาดซ็อกเก็ตล่าสุด อาจไม่จำเป็นต้องตั้งค่าตัวเลือกนี้
SO_KEEPALIVE เปิดข้อความที่ยังคงใช้งานอยู่
SO_LINGER Socket_colse และ socket_shutdown ยกเลิกการส่งข้อความหมดเวลา ตัวเลือกนี้ใช้อาร์เรย์ รวมทั้งสองคีย์ l_onoff และ l_linger
SO_OOBINLINE แทรกข้อมูลลงในบัฟเฟอร์การรับโดยตรง
SO_RCVBUF จำกัดจำนวนไบต์สูงสุดที่สามารถบัฟเฟอร์ได้
SO_RCVLOWAT ล่าช้าโดยการยอมรับข้อมูลขั้นต่ำ
SO_RCVTIMEO ชะลอการรายงานการหมดเวลาการยอมรับ โดยใช้สองคีย์ของอาร์เรย์: วินาทีและ usec
SO_REUSEADDR อนุญาตให้ใช้ซ้ำที่อยู่ในท้องถิ่น
SO_SNDBUF จำกัดจำนวนไบต์สูงสุดของบัฟเฟอร์การส่ง
SO_SNDLOWAT ชะลอการส่งข้อมูลไปยังโปรโตคอลนี้ในขณะที่ยอมรับไบต์ขั้นต่ำ
SO_SNDTIMEO ชะลอการรายงานข้อผิดพลาดการหมดเวลาเมื่อผู้ส่งผ่านการหมดเวลา ตัวเลือกนี้ใช้คีย์ของอาร์เรย์: วินาทีและ usec
SO_TYPE รับประเภทของซ็อกเก็ต ตัวเลือกนี้อาจไม่จำเป็นต้องตั้งค่า
บูลีน socket_getpeername (ซ็อกเก็ตทรัพยากร ที่อยู่สตริง พอร์ตจำนวนเต็ม)
socket_getpeername ได้รับที่อยู่และพอร์ตจากการเชื่อมต่อที่ระบุ หากการเชื่อมต่อเป็นซ็อกเก็ต Unix เส้นทางไปยังระบบไฟล์จะถูกส่งกลับ
บูลีน socket_getsockname (ซ็อกเก็ตทรัพยากร ที่อยู่สตริง พอร์ตจำนวนเต็ม)
socket_getsockname ใส่ชื่อลงในซ็อกเก็ตและเพิ่มที่อยู่และพารามิเตอร์พอร์ต ส่งคืนค่าเท็จเมื่อเกิดความล้มเหลว
(ฉันไม่ค่อยมีความรู้เกี่ยวกับฟังก์ชั่น socket_iovec_* ด้านล่างนี้มากนัก เลยไม่กล้าแปลแบบสุ่ม เลยเก็บข้อความต้นฉบับไว้)
บูลีน socket_iovec_add (ทรัพยากร iovector ความยาวจำนวนเต็ม)
ฟังก์ชัน socket_iovec_add unction จะเพิ่มเวกเตอร์ I/O ให้กับอาร์เรย์ scatter/gather
ทรัพยากร socket_iovec_alloc (นับจำนวนเต็ม … )
ฟังก์ชัน socket_iovec_alloc ส่งคืนทรัพยากรสำหรับจัดการคอลเลกชันของเวกเตอร์ I/O อาร์กิวเมนต์แรกระบุจำนวนเวกเตอร์
บูลีน socket_iovec_delete (ทรัพยากร iovector ตำแหน่งจำนวนเต็ม)
ฟังก์ชัน socket_iovec_delete จะลบเวกเตอร์ I/O ในตำแหน่งที่กำหนด
string socket_iovec_fetch (ทรัพยากร iovector ตำแหน่งจำนวนเต็ม)
ฟังก์ชัน socket_iovec_fetch ส่งกลับค่าของเวกเตอร์ที่ระบุในทรัพยากรเวกเตอร์ I/O
บูลีน socket_iovec_free (ทรัพยากร iovector)
ฟังก์ชัน socket_iovec_free ทำให้หน่วยความจำว่างที่ใช้สำหรับทรัพยากรเวกเตอร์ I/O
บูลีน socket_iovec_set (ทรัพยากร iovector ตำแหน่งจำนวนเต็ม ค่าสตริง)
socket_iovec_set ตั้งค่าของเวกเตอร์ I/O ที่ตำแหน่งที่กำหนด
จำนวนเต็ม socket_last_error (ซ็อกเก็ตทรัพยากร)
ฟังก์ชัน socket_last_error ส่งคืนข้อผิดพลาดล่าสุดที่สร้างโดยฟังก์ชันซ็อกเก็ตใดๆ ในการดำเนินการ คุณอาจตั้งค่าตัวเลือกซ็อกเก็ตของทรัพยากรซ็อกเก็ตในการเชื่อมต่อที่ระบุในฟังก์ชันด้านบน ตารางต่อไปนี้แสดงรายการรหัสข้อผิดพลาดที่ส่งคืน คุณยังสามารถใช้ฟังก์ชัน soclet_strerror เพื่อรับข้อผิดพลาดโดยละเอียด ใช้ฟังก์ชัน socket_clear_error เพื่อล้างข้อผิดพลาดของซ็อกเก็ต
คำอธิบายค่าคงที่ของตารางรหัสข้อผิดพลาดของซ็อกเก็ต
รายการพารามิเตอร์ SOCKET_E2BIG ยาวเกินไป
SOCKET_EACCES ไม่มีสิทธิ์
ที่อยู่ SOCKET_EADDRINUSE มีการใช้งานแล้ว
SOCKET_EADDRNOTAVAIL ไม่สามารถแก้ไขที่อยู่ที่ร้องขอได้
ข้อผิดพลาดในการออกอากาศ SOCKET_EADV (โฆษณา)
SOCKET_EAFNOSUPPORT ไม่รองรับโปรโตคอลโดยตระกูลที่อยู่
ทรัพยากร SOCKET_EAGAIN ไม่พร้อมใช้งานชั่วคราว
การดำเนินการ SOCKET_EALREADY กำลังดำเนินการอยู่แล้ว
SOCKET_EBADE การแลกเปลี่ยนไม่ถูกต้อง
SOCKET_EBADF ตัวอธิบายไฟล์ไม่ถูกต้อง
สถานะข้อผิดพลาดตัวอธิบายไฟล์ SOCKET_EBADFD
ข้อความแสดงข้อผิดพลาด SOCKET_EBADMSG
SOCKET_EBADR คำอธิบายคำขอไม่ถูกต้อง
SOCKET_EBADRQC รหัสคำขอไม่ถูกต้อง
SOCKET_EBADSLT ตำแหน่งการดำเนินการไม่ถูกต้อง
SOCKET_EBUSY ไดรเวอร์หรือทรัพยากรไม่ว่าง
หมายเลขช่อง SOCKET_ECHRNG อยู่นอกช่วง
SOCKET_ECOMM ส่งข้อผิดพลาดในการสื่อสาร
SOCKET_ECONNABORTED การหยุดชะงักของการรับส่งข้อมูลเนื่องจากเหตุผลด้านซอฟต์แวร์
การเชื่อมต่อ SOCKET_ECONNREFUSED ถูกปฏิเสธ
SOCKET_ECONNRESET การเชื่อมต่อถูกรีเซ็ตโดยซ็อกเก็ตเดียวกัน
SOCKET_EDESTADDRREQ ต้องระบุที่อยู่ปลายทาง
เกินโควต้าดิสก์ SOCKET_EDQUOT
มีไฟล์ SOCKET_EEXIST อยู่แล้ว
SOCKET_EFAULT ที่อยู่ผิด
โฮสต์ SOCKET_EHOSTDOWN หยุดทำงาน
SOCKET_EHOSTUNREACH ไม่ได้ถูกกำหนดเส้นทางไปยังโฮสต์
SOCKET_EIDRM บ่งชี้ว่า ID ถูกลบไปแล้ว
กำลังดำเนินการการดำเนินการ SOCKET_EINPROGRESS
การเรียกของระบบ SOCKET_EINTR ถูกบล็อก
SOCKET_EINVAL พารามิเตอร์ไม่ถูกต้อง
SOCKET_EIO ข้อผิดพลาดอินพุต/เอาต์พุต
เชื่อมต่อเทอร์มินัลส่งสัญญาณ SOCKET_EISCONN แล้ว
SOCKET_EISDIR เป็นไดเร็กทอรี
SOCKET_EISNAM เป็นไฟล์ประเภทที่ระบุ
SOCKET_EL2HLT ระดับ 2 ถูกยกเลิก
SOCKET_EL2NSYNC ระดับ 2 ไม่ตรงกัน
SOCKET_EL3HLT ระดับ 3 ถูกยกเลิก
SOCKET_EL3RST ระดับ 3 ถูกรีเซ็ตแล้ว
หมายเลขการเชื่อมต่อ SOCKET_ELNRNG อยู่นอกช่วง
SOCKET_ELOOP ลิงก์สัญลักษณ์มีระดับมากเกินไป
SOCKET_EMEDIUMTYPE ประเภทสื่อไม่ถูกต้อง (ประเภทกลาง)
SOCKET_EMFILE มีไฟล์ที่เปิดมากเกินไป
SOCKET_EMLINK มีการเชื่อมต่อมากเกินไป
ข้อความ SOCKET_EMSGSIZE ยาวเกินไป
SOCKET_EMULTIHOP พยายามมากเกินไป
ชื่อไฟล์ SOCKET_ENAMETOOLONG ยาวเกินไป
เครือข่าย SOCKET_ENETDOWN หยุดทำงาน
SOCKET_ENETRESET เครือข่ายถูกขัดจังหวะและการเชื่อมต่อถูกรีเซ็ต
SOCKET_ENETUNREACHไม่สามารถเข้าถึงเครือข่ายได้
SOCKET_ENFILE มีไฟล์ที่เปิดอยู่ในระบบมากเกินไป
SOCKET_ENOANO ไม่มีขั้วบวก
SOCKET_ENOBUFS ไม่มีพื้นที่แคช
SOCKET_ENOCSI ไม่มีโครงสร้าง CSI
SOCKET_ENODATA ไม่มีข้อมูล
SOCKET_ENODEV ไม่มีไดรเวอร์ดังกล่าว
SOCKET_ENOENT ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
SOCKET_ENOLCK ไม่มีการล็อคบันทึก
การเชื่อมต่อ SOCKET_ENOLINK กับบริการที่มีอยู่
SOCKET_ENOMEDIUM ไม่พบสื่อ
SOCKET_ENOMEM ไม่สามารถจัดสรรหน่วยความจำได้
SOCKET_ENOMSG ไม่ได้ระบุประเภทข้อความ
อุปกรณ์ SOCKET_ENONET ไม่ได้อยู่ในเครือข่าย
โปรโตคอล SOCKET_ENOPROTOOPT ไม่พร้อมใช้งาน
SOCKET_ENOSPC ไม่มีเนื้อที่ในไดรฟ์
SOCKET_ENOSR เกินทรัพยากรสตรีม
ไดรเวอร์ SOCKET_ENOSTR ไม่ใช่สตรีม
ฟังก์ชัน SOCKET_ENOSYS ไม่ได้ถูกดำเนินการ
ต้องใช้ไดรเวอร์บล็อก SOCKET_ENOTBLK
SOCKET_ENOTCONN ไม่ได้เชื่อมต่อเทอร์มินัลการส่งสัญญาณ
SOCKET_ENOTDIR ไม่มีไดเรกทอรี
ไดเรกทอรี SOCKET_ENOTEMPTY ว่างเปล่า
SOCKET_ENOTSOCK การทำงานของซ็อกเก็ตบนที่ไม่ใช่ซ็อกเก็ต
SOCKET_ENOTTY คอนโทรลเลอร์ IO ที่เข้ากันไม่ได้
ชื่อ SOCKET_ENOTUNIQ ไม่ซ้ำกันบนเครือข่าย
SOCKET_ENXIO ไม่มีไดรเวอร์หรือที่อยู่ดังกล่าว
ไม่สนับสนุนการดำเนินการ SOCKET_EOPNOTSUPP
ไม่อนุญาตให้ดำเนินการ SOCKET_EPERM
SOCKET_EPFNOSUPPORT กลุ่มโปรโตคอลไม่ได้รับการสนับสนุน
SOCKET_EPIPE ไปป์ล้มเหลว
ข้อผิดพลาดของโปรโตคอล SOCKET_EPROTO
ไม่สนับสนุนโปรโตคอล SOCKET_EPROTONOSUPPORT
SOCKET_EPROTOTYPE ประเภทของข้อผิดพลาดโปรโตคอลบนซ็อกเก็ต
ที่อยู่ระยะไกล SOCKET_EREMCHG มีการเปลี่ยนแปลง
วัตถุ SOCKET_EREMOTE อยู่ในระยะไกล
SOCKET_EREMOTEIO ข้อผิดพลาด I/O ระยะไกล
SOCKET_ERESTART การเรียกของระบบที่ถูกขัดจังหวะจะเริ่มต้นใหม่
ระบบไฟล์ SOCKET_EROFS เป็นแบบอ่านอย่างเดียว
SOCKET_ESHUTDOWN ไม่สามารถส่งการขัดจังหวะปลายทางการส่งข้อมูลได้
SOCKET_ESOCKTNOSUPPORT ประเภทซ็อกเก็ตไม่ได้รับการสนับสนุน
SOCKET_ESPIPE การค้นหาที่ผิดกฎหมาย
ข้อผิดพลาดไปป์สตรีม SOCKET_ESTRPIPE
ตัวจับเวลา SOCKET_ETIME หมดอายุ
SOCKET_ETIMEDOUT หมดเวลาการเชื่อมต่อ
SOCKET_ETOOMANYREFS มีการเชื่อมต่อมากเกินไปที่จะรวม
SOCKET_EUNATCH ไม่สามารถแนบไดรเวอร์โปรโตคอลได้
SOCKET_EUSERS มีผู้ใช้มากเกินไป
ทรัพยากร SOCKET_EWOULDBLOCK ไม่พร้อมใช้งานชั่วคราว
SOCKET_EXDEV การเชื่อมต่อข้ามไดรฟ์ไม่ถูกต้อง
การแลกเปลี่ยน SOCKET_EXFULL เป็น
socket_listen บูลีนแบบเต็ม (ซ็อกเก็ตทรัพยากร จำนวนเต็มค้าง)
ฟังก์ชัน socket_listen นี้รอการเชื่อมต่อจากไคลเอ็นต์ พารามิเตอร์ Backlog ตั้งค่าจำนวนคิวสูงสุดที่อนุญาตให้รอการเชื่อมต่อ
string socket_read (ซ็อกเก็ตทรัพยากร, ความยาวจำนวนเต็ม, ประเภทจำนวนเต็ม)
ฟังก์ชัน socket_read อ่านไบต์ที่ระบุจากซ็อกเก็ตเฉพาะ และส่งคืนค่าเท็จหากมีข้อผิดพลาด ตามค่าเริ่มต้น ระบบจะใช้โหมดการอ่านแบบไบนารี่เซฟ คุณสามารถเปลี่ยนโหมดการอ่านได้โดยตั้งค่าพารามิเตอร์ type จากภายนอกเป็น PHP_BINARY_READ คุณยังสามารถตั้งค่าประเภทเป็น PHP_NORMAL_READ ได้
บูลีน socket_readv (ซ็อกเก็ตทรัพยากร, ทรัพยากร iovector)
ฟังก์ชัน socket_readv จะแทรกข้อมูลที่อ่านลงในทรัพยากร iovector
จำนวนเต็ม socket_recv (ซ็อกเก็ตทรัพยากร, บัฟเฟอร์สตริง, ความยาวจำนวนเต็ม, แฟล็กจำนวนเต็ม)
ฟังก์ชัน socket_recv อ่านข้อมูลและแทรกลงในบัฟเฟอร์ พารามิเตอร์ความยาวตั้งค่าจำนวนไบต์สูงสุดที่จะอ่าน และพารามิเตอร์แฟล็กสามารถใช้ MSG_OOB หรือ MSG_PEEK ฟังก์ชันส่งคืนจำนวนไบต์ที่อ่าน
จำนวนเต็ม socket_recvfrom (ซ็อกเก็ตทรัพยากร, บัฟเฟอร์สตริง, ความยาวจำนวนเต็ม, โฮสต์สตริง, พอร์ตจำนวนเต็ม)
ฟังก์ชัน socket_frcvfrom อ่านข้อมูลและแทรกลงในแคช พารามิเตอร์ความยาวตั้งค่าจำนวนไบต์สูงสุดที่อนุญาตให้รับได้ พารามิเตอร์ flags สามารถตั้งค่าเป็น MSG_OOB หรือ MSG_PEEK PHP ตั้งค่าพารามิเตอร์โฮสต์และพอร์ตให้เป็นค่าที่เหมาะสมเพื่อให้สามารถรับข้อมูลที่ส่งจากโฮสต์ได้
บูลีน socket_recvmsg (ซ็อกเก็ตทรัพยากร, ทรัพยากร iovector, การควบคุมอาร์เรย์, ความยาวจำนวนเต็ม, แฟล็กจำนวนเต็ม, โฮสต์สตริง, พอร์ตจำนวนเต็ม)
ฟังก์ชัน socket_recvmsg อ่านข้อมูลจากซ็อกเก็ตและแทรกลงในทรัพยากรเวกเตอร์ I/O พารามิเตอร์ควบคุมการตั้งค่า PHP เป็นอาร์เรย์ที่เชื่อมโยงซึ่งมีสามองค์ประกอบ: cmsg_level, cmsg_type และ cmsg_data พารามิเตอร์ความยาวเป็นพารามิเตอร์ความยาวที่แนบมากับข้อมูลเกี่ยวกับการรับข้อมูล พารามิเตอร์ Flags ตั้งค่าที่อนุญาตและค่าส่งคืน ในขณะที่เขียน PHP ไม่สามารถดำเนินการค่าคงที่เอาต์พุตทั้งหมดได้ PHP ตั้งค่าพารามิเตอร์โฮสต์และพอร์ตให้เป็นค่าที่เหมาะสมเพื่อรับข้อมูลที่ส่งจากโฮสต์ระยะไกล
(ฟังก์ชัน Socket_slect ไม่ได้แปลเพราะกลัวคำไม่สื่อความหมาย)
จำนวนเต็ม socket_select (การอ่านอาร์เรย์, การเขียนอาร์เรย์, ข้อยกเว้นอาร์เรย์, จำนวนเต็ม timeout_seconds, จำนวนเต็ม timeout_microseconds)
ฟังก์ชัน socket_select จะรอการเปลี่ยนแปลงในซ็อกเก็ต PHP จะเฝ้าดูซ็อกเก็ตที่ระบุในอาเรย์การอ่านเพื่อดูข้อมูลใหม่ที่เข้ามา PHP จะเฝ้าดูสตรีมที่ระบุในอาเรย์การเขียนเพื่อให้พร้อมที่จะรับข้อมูลเพิ่มเติม สำหรับข้อผิดพลาด หากผ่านจำนวนวินาทีที่ระบุในอาร์กิวเมนต์ timeout_seconds ฟังก์ชันจะส่งกลับ ใช้อาร์กิวเมนต์เพิ่มเติม timeout_microseconds เพื่อระบุการหมดเวลาน้อยกว่า 1 วินาที
ฟังก์ชัน socket_select จะส่งคืนจำนวนซ็อกเก็ตที่เปลี่ยนแปลงหรือ FALSE หากเกิดข้อผิดพลาด หากการเรียกหมดเวลา ฟังก์ชันนี้จะส่งคืนศูนย์ด้วย
หากคุณไม่มีซ็อกเก็ตประเภทใดที่จะรับชม คุณอาจส่งอาร์เรย์ว่างหรือตัวแปรที่ตั้งค่าเป็น NULL
จำนวนเต็ม socket_send (ซ็อกเก็ตทรัพยากร, บัฟเฟอร์สตริง, ความยาวจำนวนเต็ม, แฟล็กจำนวนเต็ม)
ฟังก์ชัน socket_send เขียนข้อมูลลงในบัฟเฟอร์แล้วแทรกลงในการเชื่อมต่อ คุณต้องระบุจำนวนไบต์ที่เขียนได้สูงสุดสำหรับบัฟเฟอร์ คุณยังสามารถตั้งค่าพารามิเตอร์ flags ให้ว่าง หรือเป็นค่าคงที่รวมอย่างใดอย่างหนึ่งต่อไปนี้: MSG_DONTROUTE และ MSG_OOB ฟังก์ชันสิ้นสุดและส่งกลับจำนวนไบต์ที่เขียน มิฉะนั้นจะส่งกลับค่าเท็จ
บูลีน socket_sendmsg (ซ็อกเก็ตทรัพยากร, ทรัพยากร iovector, แฟล็กจำนวนเต็ม, ที่อยู่สตริง, พอร์ตจำนวนเต็ม)
socket_sendmsg พยายามส่งข้อมูลไปยังซ็อกเก็ต เหมาะสำหรับเต้ารับแบบไร้การเชื่อมต่อ พารามิเตอร์ Iovector เป็นทรัพยากรที่สร้างโดยฟังก์ชัน socket_iovec_alloc คุณต้องระบุพารามิเตอร์แฟล็กเป็น: NULL, MSG_DONTROUTE, MSG_OOB หรือค่าคงที่ที่รวมกันสองค่า คุณควรระบุที่อยู่และพอร์ตสำหรับการร้องขออินเทอร์เน็ต
ฟังก์ชัน Socket_sendmsg คืนค่าเป็นจริงเมื่อส่งข้อมูล แต่ไม่มีการรับประกันว่าข้อมูลจะมาถึง
จำนวนเต็ม socket_sendto (ซ็อกเก็ตทรัพยากร, บัฟเฟอร์สตริง, ความยาวจำนวนเต็ม, แฟล็กจำนวนเต็ม, ที่อยู่สตริง, พอร์ตจำนวนเต็ม)
ฟังก์ชัน socket_sendto พยายามเขียนข้อมูลลงในบัฟเฟอร์ และส่งไปยังซ็อกเก็ต เหมาะสำหรับซ็อกเก็ตไร้การเชื่อมต่อส่วนใหญ่ คุณต้องระบุค่าสถานะเป็น: NULL, MSG_DONTROUTE, MSG_OOB หรือการรวมกันของสองค่าคงที่ คุณควรระบุที่อยู่และพอร์ตที่ร้องขอด้วย
ฟังก์ชัน Socket_sendto จะคืนค่าเป็นจริงเมื่อมีการส่งข้อมูล แต่ไม่มีการรับประกันว่าข้อมูลจะมาถึง
บูลีน socket_set_block (ซ็อกเก็ตทรัพยากร)
ฟังก์ชัน socket_set_block ตั้งค่าซ็อกเก็ตให้เป็นโหมดบล็อก ซึ่งเป็นโหมดเริ่มต้น ในโหมดบล็อก การดำเนินการ I/O จะดำเนินการตามคำขอที่เสร็จสมบูรณ์
บูลีน socket_set_nonblock (ซ็อกเก็ตทรัพยากร)
ฟังก์ชัน socket_set_nonblock ตั้งค่าซ็อกเก็ตให้แทรกในโหมดที่ไม่ใช่บล็อก ในโหมดไม่บล็อก การดำเนินการ I/O จะกลับมาทันที แม้ว่าจะไม่มีข้อมูลก็ตาม
บูลีน socket_set_option (ซ็อกเก็ตทรัพยากร ระดับจำนวนเต็ม ตัวเลือกจำนวนเต็ม ค่าจำนวนเต็ม)
ฟังก์ชัน socket_set_option ตั้งค่าตัวเลือกสำหรับซ็อกเก็ต พารามิเตอร์ระดับตั้งค่าคงที่ที่แฟล็กระดับ ค่าที่ถูกต้อง ได้แก่ SOL_SOCKET, SOL_TCP และ SOL_UDP พารามิเตอร์ตัวเลือกจะต้องตรงกับค่าคงที่ในตารางตัวเลือกซ็อกเก็ตด้านบน
boolean socket_shutdown (ซ็อกเก็ตทรัพยากร จำนวนเต็มวิธี)
ฟังก์ชัน socket_shutdown ปิดซ็อกเก็ตสำหรับ I/O การตั้งค่าวิธีการเป็น 0 จะหยุดรับข้อมูล การตั้งค่าเป็น 1 จะหยุดการส่งข้อมูล และการตั้งค่าเป็น 2 จะหยุดการดำเนินการทั้งสอง
สตริง socket_strerror (ข้อผิดพลาดจำนวนเต็ม)
ฟังก์ชัน socket_strerror ส่งคืนหมายเลขข้อผิดพลาดและข้อมูลข้อผิดพลาดโดยละเอียด
จำนวนเต็ม socket_write (ซ็อกเก็ตทรัพยากร, บัฟเฟอร์สตริง, ความยาวจำนวนเต็ม)
ฟังก์ชัน socket_write เขียนข้อมูลลงในบัฟเฟอร์แล้วส่งออกไปยังซ็อกเก็ต คุณสามารถระบุพารามิเตอร์ความยาวเพื่อระบุจำนวนไบต์สูงสุดในบัฟเฟอร์ ฟังก์ชันนี้มักจะสะดวกกว่า socket_send
บูลีน socket_writev (ซ็อกเก็ตทรัพยากร, ทรัพยากร iovector)
ฟังก์ชัน socket_writev เขียนข้อมูลไปยังซ็อกเก็ตผ่านเวกเตอร์ I/O