تتواصل وظائف المقبس هذه مباشرة مع بروتوكول الإنترنت لإرسال المعلومات. بالمقارنة مع تيارات fopensock، فهي تعمل بمستوى منخفض نسبيًا. عادةً ما تقوم بتغليف وظائف C ولها أسماء مشابهة. إذا كانت لديك خبرة في برمجة المقبس في لغة C، فسوف تكون مرتاحًا جدًا لاستخدام هذه الوظائف. لن نناقش برمجة المقبس بتفاصيل خاصة هنا.
استخدم هذه الوظائف لحل المشكلات الصعبة التي لا تستطيع الوظائف ذات المستوى الأعلى حلها. يمكن أن يؤدي استخدام هذه الوظائف إلى تحقيق وظائف مشابهة لـ fopen. قد يكون لديك العديد من الطرق لتنفيذ وظائف المقبس، مثل برنامج الإنترنت الخفي الذي يتم تنفيذه باستخدام CLI (واجهة سطر الأوامر) في PHP.
مقبس الموارد_قبول (مقبس الموارد)
في جانب الخادم من البرنامج النصي الخاص بك، استخدم مقبس_قبول لقبول اتصال وارد. يجب عليك أولاً إنشاء مأخذ توصيل وربطه باسم وتعيينه للاستماع على المنفذ. في وضع الحظر، سيُنشئ مقبس_القبول اتصالاً فريدًا ومقبولًا. في الوضع غير المحظور، يتم إرجاع خطأ إذا لم يتم إنشاء اتصال. بالإضافة إلى ذلك، عندما يكون لديك مورد مأخذ توصيل جديد، يمكنك إجراء عمليات القراءة والكتابة.
أدناه سوف نعرض خادم صدى بسيط. يعمل تحت سطر الأوامر (سطر الأوامر)، وينتظر اتصالات العميل على المنفذ 12345.
المقبس_قبول
<?php
set_time_limit(0);
// إنشاء المقبس
إذا(($socket = المقبس_إنشاء(AF_INET, SOCK_STREAM, 0)) < 0){
طباعة ("تعذر إنشاء مأخذ توصيل: " . مقبس_strerror(socket_last_error()) . "n");
}
// ربطه بالعنوان والمنفذ المحددين
إذا(($error = المقبس_bind($socket, gethostbyname($_SERVER['HOSTNAME']), 12345)) < 0){
طباعة ("تعذر ربط المقبس:" . مقبس_strerror(socket_last_error()) . "n");
}
إذا(($خطأ = مقبس_ليستين($socket, 5)) < 0){
طباعة ("تعذر الإدراج في المقبس:" .
المقبس_strerror(socket_last_error()) "n");
}
بينما (صحيح) {
//انتظر الاتصال
إذا(($قبول = المقبس_قبول($socket)) < 0){
print("خطأ أثناء القراءة:" .socket_strerror($message) ."n");
استراحة؛
}
//أرسل رسالة ترحيب
المقبس_الكتابة($قبول، "تم قبول الاتصالn");
print(date('Ymd H:i:s') . "الحالة: تم قبول الاتصالn");
ob_flush();
بينما (صحيح) {
// قراءة السطر من العميل
إذا (FALSE === ($line =ocket_read($accept, 1024))){
طباعة ("تعذرت القراءة من المقبس:" .
المقبس_strerror(socket_last_error()) "n");
استراحة 2؛
}
إذا ( !@socket_write($accept , "ECHO: $line")){
print(date('Ymd H:i:s') . "الحالة: تمت مقاطعة الاتصالn");
استراحة؛
}
print(date('Ymd H:i:s') . "قراءة: $line");
ob_flush();
}
المقبس_إغلاق($قبول);
}
?>
منطقي مقبس_ربط (مقبس الموارد، عنوان السلسلة، منفذ عدد صحيح)
يربط مقبس المقبس () هذا مورد مأخذ التوصيل بالعنوان. يجب أن يكون هذا المقبس موردًا يتم إرجاعه بواسطة الدالة مقبس_إنشاء(). يجب أن يكون هذا العنوان عنوان IP أو مسارًا إلى مأخذ توصيل Unix. إذا كان مأخذ توصيل يعمل على الإنترنت، فيجب عليك أيضًا توفير منفذ.
المقبس_واضح_خطأ (مقبس الموارد)
يمكن لهذه الوظيفة مسح الأخطاء للمأخذ المحدد. إذا لم يتم تحديد أي معلمات، فسيتم مسح جميع أخطاء المقبس.
المقبس_إغلاق (مقبس الموارد)
تقوم وظيفة المقبس بإغلاق المقبس ومسح موارد الذاكرة التي يشغلها المقبس.
مقبس منطقي منطقي (مقبس الموارد، عنوان السلسلة، منفذ عدد صحيح)
تقوم هذه الوظيفة بإنشاء اتصال العميل بمنفذ أو مأخذ توصيل. يجب عليك توفير مأخذ توصيل تم إنشاؤه بواسطة مقبس_إنشاء. يجب أن تكون معلمة العنوان هي المسار إلى مأخذ توصيل أو عنوان IP. إذا كان هو الأخير، فيجب أن يتبعه أيضًا رقم منفذ رقمي.
يوضح المثال التالي عملية الاتصال بخادم اللعبة والحصول على المعلومات باستخدام بروتوكول UDP.
المقبس_الاتصال
<?php
// إنشاء مقبس UDP
إذا(($socket = المقبس_إنشاء(AF_INET, SOCK_DGRAM, SOL_UDP)) < 0){
طباعة ("تعذر إنشاء مأخذ توصيل:" .
المقبس_strerror(socket_last_error()) "n");
}
// المهلة بعد 5 ثواني
المقبس_set_option($socket, SOL_SOCKET,
SO_RCVTIMEO, array('sec'=>5,'usec'=>0));
// الاتصال بالخادم الرئيسي RtCW
إذا(!socket_connect($socket, 'wolfmaster.idsoftware.com', 27950)){
طباعة ("تعذر الاتصال:" .
المقبس_strerror(socket_last_error()) "n");
}
//إرسال طلب للخوادم
المقبس_الكتابة($socket, "xFFxFFxFFxFFgetserversx00");
//الحصول على الخوادم
$الخادم = المصفوفة();
بينما(FALSE !== ($line = @socket_read($socket, 4096))){
// تحليل البيانات
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) . " الخوادم</h1>n");
// حلقة فوق الخوادم، والحصول على الحالة
foreach(خادم $ كـ $s){
print("<h1>{$s['ip']}:{$s['port']}</h1>n");
// الاتصال بخادم RtCW
إذا(!socket_connect($socket, $s['ip'], $s['port'])){
طباعة("<p>n" .
المقبس_strerror(socket_last_error()) .
"n</p>n");
يكمل؛
}
//أرسل طلب الحالة
المقبس_الكتابة($socket, "xFFxFFxFFxFFgetstatusx00");
//الحصول على الحالة من الخادم
إذا (FALSE === ($line = @socket_read($socket, 1024))){
طباعة("<p>n" .
المقبس_strerror(socket_last_error()) .
"n</p>n");
يكمل؛
}
$part = تنفجر("n", $line);
// الإعدادات في السطر الثاني مفصولة بخطوط مائلة عكسية
$setting =تفجير("\", $part[1]);
print("<h2>التكوين</h2>n");
طباعة("<p>n");
ل($s=1; $s < العد($setting); $s += 2){
print("tt{$setting[$s]} = {$setting[$s+1]<br>n");
}
طباعة("</p>n");
print("<h2>اللاعبون</h2>n");
$lastPlayer = count($part) - 1;
for($p=2; $p < $lastPlayer; $p++){
$player = Explosion(" ", $part[$p]);
طباعة ("{$player[2]} النتيجة = {$player[0]} " .
"Ping={$player[1]<br>n");
}
طباعة("</p>n");
ob_flush();
}
طباعة("</table>n");
المقبس_إغلاق($socket);
?>
المورد مقبس_إنشاء (عائلة عدد صحيح، عدد صحيح نوع المقبس، بروتوكول عدد صحيح)
يقوم المقبس بتهيئة بنية المقبس. المعلمة الأولى هي عائلة البروتوكول أو المجال. يجب عليك استخدام 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) لإنشاء مأخذ توصيل للاستماع. سيستمع المقبس الذي تم إنشاؤه إلى المنفذ المحدد، وسيقوم تراكم المعلمة الاختيارية بتعيين الحد الأقصى لعدد الاتصالات المسموح بها.
منطقية المقبس_إنشاء_زوج (عائلة عدد صحيح، نوع مأخذ التوصيل الصحيح، بروتوكول عدد صحيح، مقابض الصفيف)
تقوم الدالة مقبس_إنشاء_زوج بإنشاء زوج من اتصالات المقبس. أولًا، المعلمات الثلاثة الأولى هي وصف لـsocket_create، ومعلمة المقابض عبارة عن مصفوفة تحتوي على اثنين من موارد المقبس. هذه الوظيفة عبارة عن تغليف لوظيفة مأخذ التوصيل في لغة C.
المقبس_إنشاء_زوج
<?php
إذا(!socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $socket)){
print("تعذر إنشاء مآخذ توصيل!n");
مخرج()؛
}
$child = pcntl_fork();
إذا($طفل == -1){
طباعة("تعذر التفرع!n");
مخرج()؛
}
وإلاسيف($طفل > 0){
//parent
المقبس_إغلاق($socket[0]);
print("الوالد: في انتظار الرسالةn");
$message = المقبس_قراءة($socket[1], 1024, PHP_NORMAL_READ);
print("الوالد: حصل على رسالة--$messagen");
المقبس_الكتابي($socket[1], "مرحبًا، العملية الفرعية!n");
pcntl_waitpid($child, $status);
}آخر{
//طفل
المقبس_إغلاق($socket[1]);
المقبس_الكتابي($socket[0], "مرحبًا، عملية الوالدين!n");
طباعة("الطفل: في انتظار الرسالةn");
$message = المقبس_قراءة($socket[0], 1024, PHP_NORMAL_READ);
print("الطفل: حصل على رسالة--$messagen");
خروج (0)؛
}
?>
قيمة المقبس_get_option (مقبس الموارد، مستوى عدد صحيح، خيار عدد صحيح)
تقوم الدالة مأخذ التوصيل بإرجاع قيمة مضافة مدرجة في الجدول التالي. يجب عليك توفير مورد مأخذ التوصيل الذي تم إنشاؤه بواسطة مأخذ التوصيل ومستوى. يمكن تحديد مستوى المقبس الذي تم الحصول عليه باستخدام SOL_SOCKET. وبدلاً من ذلك، استخدم بروتوكولاً مثل SOL_TCP لتمثيل بروتوكول TCP. قد يتم تعيين هذه الخيارات بواسطة المقبس_set_option.
المقبس_get_options
<?php
$socket = المقبس_إنشاء(AF_INET, SOCK_STREAM, SOL_TCP);
طباعة ("SO_BROADCAST:" .
المقبس_get_option($socket, SOL_SOCKET,
SO_BROADCAST) "<br>n");
طباعة ("SO_DEBUG:" .
المقبس_get_option($socket, SOL_SOCKET,
SO_DEBUG) "<br>n");
طباعة ("SO_DONTROUTE:" .
المقبس_get_option($socket, SOL_SOCKET,
SO_DONTROUTE) "<br>n");
طباعة ("SO_ERROR:" .
المقبس_get_option($socket, SOL_SOCKET,
SO_ERROR) ."<br>n");
طباعة ("SO_KEEPALIVE:" .
المقبس_get_option($socket, SOL_SOCKET,
SO_KEEPALIVE) "<br>n");
طباعة ("SO_LINGER:" .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_LINGER)، TRUE) "<br>n");
طباعة ('SO_OOBINLINE:' .
المقبس_get_option($socket, SOL_SOCKET,
SO_OOBINLINE) "<br>n");
طباعة ("SO_RCVBUF:" .
المقبس_get_option($socket, SOL_SOCKET,
SO_RCVBUF) "<br>n");
طباعة ("SO_RCVLOWAT:" .
المقبس_get_option($socket, SOL_SOCKET,
SO_RCVLOWAT) "<br>n");
طباعة ("SO_RCVTIMEO:" .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_RCVTIMEO)، TRUE) "<br>n");
طباعة ("SO_REUSEADDR:" .
المقبس_get_option($socket, SOL_SOCKET,
SO_REUSEADDR) "<br>n");
طباعة ("SO_SNDBUF:" .
المقبس_get_option($socket, SOL_SOCKET,
SO_SNDBUF) "<br>n");
طباعة ("SO_SNDLOWAT:" .
المقبس_get_option($socket, SOL_SOCKET,
SO_SNDLOWAT) "<br>n");
طباعة ("SO_SNDTIMEO:" .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_SNDTIMEO)، TRUE) "<br>n");
طباعة ("SO_TYPE:" .
المقبس_get_option($socket, SOL_SOCKET,
SO_TYPE) "<br>n");
?>
وصف خيار جدول خيارات المقبس
يسمح SO_BROADCAST للمآخذ الموجهة تلقائيًا بإرسال واستقبال حزم البث
يقوم SO_DEBUG بتشغيل وظيفة تصحيح مأخذ التوصيل. فقط الجذر لديه الإذن بتشغيل هذا الخيار.
لا يقبل SO_DONTROUTE حزم التوجيه عبر البوابة
SO_ERROR يحصل على خطأ مأخذ التوصيل الأخير ويمسحه، وقد لا يلزم تعيين هذا الخيار.
SO_KEEPALIVE افتح الرسالة التي تظل نشطة
SO_LINGER يقوم كل من Switch_colse وsocket_shutdown بإحباط مهلة إرسال الرسالة، ويستخدم هذا الخيار مصفوفة، بما في ذلك المفتاحين l_onoff وl_linger.
يقوم SO_OOBINLINE بإدراج البيانات مباشرة في المخزن المؤقت المتلقي
يحدد SO_RCVBUF الحد الأقصى لعدد البايتات التي يمكن تخزينها مؤقتًا
يتأخر SO_RCVLOWAT عن طريق قبول الحد الأدنى من البيانات
SO_RCVTIMEO يؤخر الإبلاغ عن مهلة القبول، باستخدام مفتاحين من المصفوفة: sec وusec
يسمح SO_REUSEADDR بإعادة استخدام العناوين المحلية
يحدد SO_SNDBUF الحد الأقصى للبايتات لمخزن الإرسال المؤقت
يقوم SO_SNDLOWAT بتأخير إرسال البيانات إلى هذا البروتوكول مع قبول الحد الأدنى من البايتات
SO_SNDTIMEO يؤخر الإبلاغ عن أخطاء المهلة عندما يمرر المرسل المهلة. يستخدم هذا الخيار مفاتيح المصفوفة: sec وusec
SO_TYPE يحصل على نوع المقبس، قد لا يحتاج هذا الخيار إلى التعيين
.
يحصل مقبس_getpeername على العنوان والمنفذ من اتصال محدد. إذا كان الاتصال عبارة عن مقبس Unix، فسيتم إرجاع المسار إلى نظام الملفات.
منطقي المقبس_getsockname (مقبس الموارد، عنوان السلسلة، منفذ عدد صحيح)
يضعocket_getsockname اسمًا في المقبس ويضيف معلمات العنوان والمنفذ. إرجاع كاذبة عند الفشل.
(لا أعرف الكثير عن وظائف مقبس_iovec_* أدناه، لذا لا أجرؤ على ترجمتها عشوائيًا، لذا أحتفظ بالنص الأصلي)
منطقي المقبس_iovec_add (متجه المصدر، طول عدد صحيح)
تضيف وظيفة مأخذ التوصيلocket_iovec_add متجه الإدخال/الإخراج إلى مصفوفة التشتت/التجميع.
المورد المقبس_iovec_alloc (عدد صحيح، ...)
تقوم الدالة مأخذ التوصيل_iovec_alloc بإرجاع مورد لمعالجة مجموعة من متجهات الإدخال/الإخراج. تحدد الوسيطة الأولى عدد المتجهات. تحدد الوسيطات التالية طول كل متجه.
منطقي المقبس_iovec_delete (متجه المصدر، موضع العدد الصحيح)
تقوم الدالة مقبس_iovec_delete بإزالة متجه الإدخال/الإخراج في الموضع المحدد.
سلسلة المقبس_iovec_fetch (ناقل الموارد، موضع العدد الصحيح)
تقوم الدالة مقبس_iovec_fetch بإرجاع قيمة المتجه المحدد في مورد متجه الإدخال/الإخراج.
منطقي المقبس_iovec_free (متجه الموارد)
تقوم وظيفة المقبس_iovec_free بتحرير الذاكرة المستخدمة لمورد متجه الإدخال/الإخراج.
منطقي المقبس_iovec_set(ناقل المصدر، موضع العدد الصحيح، قيمة السلسلة)
تقوم مجموعة المقبس_iovec_set بتعيين قيمة متجه الإدخال/الإخراج في الموضع المحدد.
عدد صحيح مأخذ التوصيل_الأخير (مقبس الموارد)
تقوم الدالة مأخذ التوصيل_الأخير_بإرجاع الخطأ الأخير الذي تم إنشاؤه بواسطة أي دالة مأخذ توصيل في العملية. ربما تكون قد قمت بتعيين خيار مأخذ التوصيل لمورد مأخذ التوصيل على الاتصال المحدد في الوظيفة أعلاه. يسرد الجدول التالي رموز الخطأ التي تم إرجاعها، ويمكنك أيضًا استخدام الدالة soclet_strerror للحصول على أخطاء تفصيلية. استخدم وظيفة مأخذ التوصيل_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 إلى أنه تم حذف المعرف
يتم تنفيذ عملية 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 وحدة تحكم الإدخال والإخراج غير متوافقة
اسم SOCKET_ENOTUNIQ ليس فريدًا على الشبكة
SOCKET_ENXIO لا يوجد مثل هذا السائق أو العنوان
عملية SOCKET_EOPNOTSUPP غير مدعومة
عملية SOCKET_EPERM غير مسموح بها
عائلة البروتوكول SOCKET_EPFNOSUPPORT غير مدعومة
فشل SOCKET_EPIPE في توجيه الأنبوب
خطأ في بروتوكول SOCKET_EPROTO
بروتوكول SOCKET_EPROTONOSUPPORT غير مدعوم
SOCKET_EPROTOTYPE نوع خطأ البروتوكول الموجود على المقبس
لقد تغير عنوان SOCKET_EREMCHG البعيد
كائن SOCKET_EREMOTE بعيد
SOCKET_EREMOTEIO خطأ في الإدخال/الإخراج عن بعد
SOCKET_ERESTART سيتم إعادة تشغيل استدعاء النظام الذي تمت مقاطعته
نظام الملفات SOCKET_EROFS للقراءة فقط
لا يمكن إرسال مقاطعة نقطة نهاية الإرسال
SOCKET_ESOCKTNOSUPPORT نوع المقبس غير مدعوم
SOCKET_ESPIPE بحث غير قانوني
خطأ في أنبوب تيار SOCKET_ESTRPIPE
تنتهي صلاحية مؤقت SOCKET_ETIME
SOCKET_ETIMEDOUT مهلة الاتصال
SOCKET_ETOOMANYREFS عدد كبير جدًا من الاتصالات التي لا يمكن دمجها
SOCKET_EUNATCH غير قادر على إرفاق برنامج تشغيل البروتوكول
SOCKET_EUSERS عدد كبير جدًا من المستخدمين
مورد SOCKET_EWOOLDBLOCK غير متاح مؤقتًا
SOCKET_EXDEV اتصال عبر محركات الأقراص غير صالح
تبادل SOCKET_EXFULL ممتلئ
بمقبس منطقي منطقي (مقبس الموارد، عدد صحيح متراكم)
تنتظر وظيفة مأخذ التوصيل هذه الاتصالات من العميل. تحدد المعلمة backlog الحد الأقصى لعدد قوائم الانتظار المسموح بها لانتظار الاتصالات.
سلسلة المقبس_قراءة (مقبس الموارد، طول عدد صحيح، نوع عدد صحيح)
تقوم الدالة مقبس_قراءة بقراءة البايتات المحددة من مأخذ توصيل محدد وإرجاع خطأ إذا كان هناك خطأ. بشكل افتراضي، يتم استخدام وضع القراءة الثنائي الآمن. يمكنك تغيير وضع القراءة عن طريق تعيين معلمة النوع خارجيًا على PHP_BINARY_READ. يمكنك أيضًا ضبط النوع على PHP_NORMAL_READ.
منطقية المقبس_قراءة (مقبس الموارد، iovector الموارد)
تقوم الدالة مقبس_قراءة بإدراج بيانات القراءة في مورد iovector.
عدد صحيح المقبس_ريكف (مقبس الموارد، المخزن المؤقت للسلسلة، طول عدد صحيح، أعلام عدد صحيح)
تقوم الدالة مأخذ التوصيل بقراءة البيانات وإدراجها في المخزن المؤقت. تقوم معلمة الطول بتعيين الحد الأقصى لعدد وحدات البايت المطلوب قراءتها، ويمكن لمعلمة العلامة استخدام MSG_OOB أو MSG_PEEK. ترجع الدالة عدد البايتات المقروءة.
عدد صحيح المقبس_ريكفروم (مقبس الموارد، المخزن المؤقت للسلسلة، طول عدد صحيح، مضيف السلسلة، منفذ عدد صحيح)
تقوم الدالة مأخذ التوصيل_frcvfrom بقراءة البيانات وإدراجها في ذاكرة التخزين المؤقت. تحدد معلمة الطول الحد الأقصى لعدد البايتات المسموح بتلقيها. يمكن تعيين معلمة العلامات على MSG_OOB أو MSG_PEEK. تقوم PHP بتعيين معلمات المضيف والمنفذ على القيم المناسبة لتتمكن من الحصول على البيانات المرسلة من المضيف.
منطقي المقبس_recvmsg (مقبس الموارد، ناقل الموارد، التحكم في الصفيف، طول عدد صحيح، أعلام عدد صحيح، مضيف سلسلة، منفذ عدد صحيح)
تقوم الدالة مأخذ التوصيل بقراءة البيانات من مأخذ التوصيل وإدراجها في مورد متجه الإدخال/الإخراج. معلمة التحكم في إعداد PHP عبارة عن مصفوفة ترابطية تحتوي على ثلاثة عناصر: cmsg_level، وcmsg_type، وcmsg_data. معلمة الطول هي معلمة طول مرفقة بالبيانات المتعلقة بالحصول على البيانات. تقوم المعلمة Flags بتعيين القيم المسموح بها وقيم الإرجاع. في وقت كتابة هذا التقرير، لم يكن بإمكان PHP تنفيذ جميع ثوابت الإخراج. تقوم PHP بتعيين معلمات المضيف والمنفذ على القيم المناسبة من أجل الحصول على البيانات المرسلة من المضيف البعيد.
(لم تتم ترجمة الدالة مقبس_slect لأنني أخشى أن الكلمات لا تنقل المعنى)
عدد صحيح مأخذ التوصيل (قراءة المصفوفة، كتابة المصفوفة، استثناء المصفوفة، عدد صحيح timeout_thans، عدد صحيح timeout_microthans)
تنتظر وظيفة مأخذ التوصيل التغييرات التي تطرأ على المقابس، حيث تراقب PHP المقابس الواردة في مصفوفة القراءة للبيانات الجديدة الواردة. وتراقب PHP التدفقات الواردة في مصفوفة الكتابة لتكون جاهزة لقبول المزيد من البيانات للأخطاء. إذا مر عدد الثواني المحدد في الوسيطة timeout_thans، ترجع الدالة الوسيطة timeout_microthans الاختيارية لتحديد مهلة أقل من ثانية واحدة.
تقوم الدالة مأخذ التوصيل بإرجاع عدد المقابس التي تم تغييرها أو FALSE في حالة حدوث خطأ، إذا انتهت مهلة الاستدعاء، فإن هذه الدالة ترجع صفرًا كما تقوم أيضًا بتعديل المصفوفات المحددة بحيث تتضمن فقط تلك المقابس التي تم تغييرها.
إذا لم يكن لديك مآخذ توصيل من نوع معين لمشاهدتها، فيمكنك تمرير مصفوفة فارغة أو متغير تم تعيينه على NULL.
عدد صحيح مأخذ التوصيل (مقبس الموارد، المخزن المؤقت للسلسلة، طول عدد صحيح، أعلام عدد صحيح)
تقوم وظيفة مأخذ التوصيل بكتابة البيانات إلى المخزن المؤقت ثم تقوم بإدراجها في الاتصال. يجب عليك تحديد الحد الأقصى لعدد وحدات البايت القابلة للكتابة للمخزن المؤقت. يمكنك أيضًا تعيين معلمة العلامات على فارغة، أو على أحد الثوابت المدمجة التالية: MSG_DONTROUTE وMSG_OOB. تنتهي الدالة وترجع عدد البايتات المكتوبة، وإلا فإنها ترجع خطأ.
منطقي المقبس_sendmsg (مقبس الموارد، ناقل iovector، أعلام عدد صحيح، عنوان السلسلة، منفذ عدد صحيح)
يحاول المقبس_sendmsg إرسال البيانات إلى المقبس. إنها مناسبة للمآخذ غير المتصلة. المعلمة Iovector هي مورد تم إنشاؤه بواسطة الدالة مقبس_iovec_alloc. يجب عليك تحديد معلمة العلامات كـ: NULL، أو MSG_DONTROUTE، أو MSG_OOB، أو ثابتين مدمجين. يجب عليك تحديد عنوان ومنفذ لطلبات الإنترنت.
ترجع الدالة مقبس_sendmsg صحيحًا عند إرسال البيانات، ولكن ليس هناك ضمان بوصول البيانات.
عدد صحيح مأخذ التوصيل (مقبس الموارد، سلسلة المخزن المؤقت، طول عدد صحيح، أعلام عدد صحيح، عنوان السلسلة، منفذ عدد صحيح)
تحاول الدالة المقبس_sendto كتابة البيانات إلى المخزن المؤقت وإرسالها إلى المقبس. إنها مناسبة لمعظم المقابس غير المتصلة. يجب عليك تحديد العلامات كـ: NULL، MSG_DONTROUTE، MSG_OOB أو مجموعة من ثابتين. يجب عليك أيضًا تحديد العنوان والمنفذ المطلوب.
ترجع الدالة Switch_sendto القيمة true عند إرسال البيانات، ولكن ليس هناك ضمان بوصول البيانات.
منطقي المقبس_set_block (مقبس الموارد)
تقوم وظيفة المقبس_set_block بتعيين المقبس في وضع الكتلة، وهو الوضع الافتراضي. في وضع الكتلة، يتم تنفيذ عمليات الإدخال/الإخراج بناءً على طلب مكتمل.
منطقية المقبس_set_nonblock (مقبس الموارد)
تقوم الدالة مأخذ التوصيل_set_nonblock بتعيين المقبس الذي سيتم إدخاله في أي وضع غير محظور. في وضع عدم الحظر، تعود عمليات الإدخال/الإخراج على الفور، حتى في حالة عدم وجود بيانات.
منطقي المقبس_set_option (مقبس الموارد، مستوى عدد صحيح، خيار عدد صحيح، قيمة عدد صحيح)
تقوم الدالة المقبس_set_option بتعيين خيار للمقبس. تقوم معلمة المستوى بتعيين ثابت يشير إلى المستوى. تتضمن القيم الصالحة: SOL_SOCKET وSOL_TCP وSOL_UDP. يجب أن تتطابق معلمات الخيار مع الثوابت الموجودة في جدول خيارات المقبس أعلاه.
منطقية المقبس_إيقاف التشغيل (مقبس الموارد، عدد صحيح كيف)
تغلق الدالة مأخذ التوصيل مأخذ التوصيل للإدخال/الإخراج. سيؤدي تعيين الكيفية على 0 إلى إيقاف تلقي البيانات، وسيؤدي تعيينها إلى 1 إلى إيقاف إرسال البيانات، وسيؤدي تعيينها إلى 2 إلى إيقاف كلتا العمليتين.
سلسلة المقبس_strerror (خطأ عدد صحيح)
تقوم الدالة مأخذ التوصيل بإرجاع رقم خطأ ومعلومات تفصيلية عن الخطأ.
عدد صحيح المقبس_الكتابة (مقبس الموارد، المخزن المؤقت للسلسلة، طول عدد صحيح)
تقوم وظيفة المقبس بكتابة البيانات إلى المخزن المؤقت ثم إخراجها إلى المقبس. يمكنك تحديد معلمة الطول لتحديد الحد الأقصى لعدد البايتات في المخزن المؤقت. هذه الوظيفة عادة ما تكون أكثر ملاءمة من المقبس_الإرسال.
منطقية المقبس_الكتابة (مقبس الموارد، iovector الموارد)
تقوم الدالة مأخذ التوصيل بكتابة البيانات إلى مأخذ التوصيل من خلال ناقلات الإدخال/الإخراج.