| connect(2) | System Calls Manual | connect(2) |
الاسم¶
connect - بدء اتصال على مقبس
المكتبة¶
مكتبة سي المعيارية (libc، -lc)
موجز¶
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
الوصف¶
استدعاء النظام connect() يصل المقبس المشار إليه بواصف الملف sockfd بالعنوان المحدد بواسطة addr. تحدد الوسيطة addrlen حجم addr. يُحدد تنسيق العنوان في addr بمساحة عنوان المقبس sockfd؛ انظر socket(2) لمزيد من التفاصيل.
إذا كان المقبس sockfd من النوع SOCK_DGRAM، فإن addr هو العنوان الذي تُرسل إليه الرزم البياناتية مبدئياً، والعنوان الوحيد الذي تُستقبل منه الرزم البياناتية. إذا كان المقبس من النوع SOCK_STREAM أو SOCK_SEQPACKET، يحاول هذا الاستدعاء إنشاء اتصال بالمقبس المرتبط بالعنوان المحدد بواسطة addr.
بعض مقابس البروتوكول (مثل مقابس التدفق في نطاق UNIX) قد تنجح connect() مرة واحدة فقط.
بعض مقابس البروتوكول (مثل مقابس الرزم البياناتية في نطاقي UNIX والإنترنت) قد تستخدم connect() عدة مرات لتغيير ارتباطها.
بعض مقابس البروتوكول (مثل مقابس TCP وكذلك مقابس الرزم البياناتية في نطاقي UNIX والإنترنت) قد تحل الارتباط بالاتصال بعنوان مع تعيين العضو sa_family من sockaddr إلى AF_UNSPEC؛ بعد ذلك، يمكن توصيل المقبس بعنوان آخر. (AF_UNSPEC مدعوم منذ Linux 2.2.)
قيمة الإرجاع¶
إذا نجح الاتصال أو الربط، يُعاد صفر. عند الخطأ، يُعاد -1، ويُضبط errno للإشارة إلى الخطأ.
الأخطاء¶
ما يلي هو أخطاء مقابس عامة فقط. قد توجد رموز خطأ أخرى خاصة بالنطاق.
- EACCES
- لمقابس نطاق UNIX، التي تُعرف باسم المسار: يُرفض إذن الكتابة على ملف المقبس، أو يُرفض إذن البحث لأحد الدلائل في بادئة المسار. (انظر أيضًا path_resolution(7).)
- EACCES
- EPERM
- حاول المستخدم الاتصال بعنوان بث دون تمكين علم البث للمقبس أو فشل طلب الاتصال بسبب قاعدة جدار ناري محلي.
- EACCES
- قد يُعاد أيضًا إذا رفضت سياسة SELinux اتصالاً (مثلاً، إذا كانت هناك سياسة تنص على أن وكيل HTTP يمكنه الاتصال فقط بالمنافذ المرتبطة بخوادم HTTP، ويحاول الوكيل الاتصال بمنفذ مختلف).
- EADDRINUSE
- العنوان المحلي قيد الاستخدام بالفعل.
- EADDRNOTAVAIL
- (مقابس نطاق الإنترنت) لم يسبق ربط المقبس المشار إليه بـ sockfd بعنوان، وعند محاولة ربطه بمنفذ مؤقت (ephemeral)، تبيّن أن جميع أرقام المنافذ في نطاق المنافذ المؤقتة قيد الاستخدام حالياً. راجع النقاش حول /proc/sys/net/ipv4/ip_local_port_range في ip(7).
- EAFNOSUPPORT
- لم يكن للعنوان المُمرّر عائلة العنوان الصحيحة في حقل sa_family الخاص به.
- EAGAIN
- لمقابس نطاق UNIX غير المحجوبة، المقبس غير محجوب، ولا يمكن إكمال الاتصال فوراً. لعائلات المقابس الأخرى، توجد إدخالات غير كافية في خبيئة التوجيه.
- EALREADY
- المقبس غير محجوب ولم تُكمل محاولة الاتصال السابقة بعد.
- EBADF
- sockfd ليس واصف ملف مفتوح صالح.
- ECONNREFUSED
- وجدت connect() على مقبس تدفق عدم وجود من يستمع على العنوان البعيد.
- EFAULT
- عنوان بنية المقبس خارج مساحة عنوان المستخدم.
- EINPROGRESS
- المقبس غير محجوب ولا يمكن إكمال الاتصال فوراً. (فشلت مقابس نطاق UNIX مع EAGAIN بدلاً من ذلك.) من الممكن استخدام select(2) أو poll(2) للانتظار حتى الإكمال باختيار المقبس للكتابة. بعد أن يشير select(2) إلى قابلية الكتابة، استخدم getsockopt(2) لقراءة خيار SO_ERROR على المستوى SOL_SOCKET لتحديد ما إذا كانت connect() قد اكتملت بنجاح (SO_ERROR هو صفر) أو دون نجاح (SO_ERROR هو أحد رموز الخطأ المعتادة المدرجة هنا، موضحاً سبب الفشل).
- EINTR
- قُطع استدعاء النظام بإشارة تم التقاطها؛ انظر signal(7).
- EISCONN
- المقبس متصل بالفعل.
- ENETUNREACH
- الشبكة غير قابلة للوصول.
- ENOTSOCK
- واصف الملف sockfd لا يشير إلى مقبس.
- EPROTOTYPE
- نوع المقبس لا يدعم بروتوكول الاتصالات المطلوب. يمكن أن يحدث هذا الخطأ، مثلاً، عند محاولة توصيل مقبس رزم بياناتية في نطاق UNIX بمقبس تدفق.
- ETIMEDOUT
- انتهاء المهلة أثناء محاولة الاتصال. قد يكون الخادم مشغولاً جداً لقبول اتصالات جديدة. لاحظ أنه لمقابس IP قد تكون المهلة طويلة جداً عند تمكين ملفات تعريف الارتباط المتزامنة على الخادم.
الإصدارات¶
يجب أن تضمن البرامج القابلة للنقل أن addr.sun_path هي سلسلة منتهية بـ null لمقابس AF_UNIX.
المعايير¶
POSIX.1-2024.
التاريخ¶
POSIX.1-2001، SVr4، 4.2BSD.
ملاحظات¶
إذا فشلت connect()، اعتبر حالة المقبس غير محددة. يجب على التطبيقات المحمولة إغلاق المقبس وإنشاء واحد جديد لإعادة الاتصال.
أمثلة¶
مثال على استخدام connect() موضح في getaddrinfo(3).
انظر أيضًا¶
accept(2), bind(2), getsockname(2), listen(2), socket(2), path_resolution(7), selinux(8)
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 8 فبراير 2026 | صفحات دليل لينكس 6.18 |