.\" -*- coding: UTF-8 -*- .\" Copyright 1983-1991, The Regents of the University of California. .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH recv 2 "29 أكتوبر 2025" "صفحات دليل لينكس 6.18" .SH الاسم recv، recvfrom، recvmsg \- استلام رسالة من مقبس .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBssize_t recv(\fPsize_t size; \fB int \fP\fIsockfd\fP\fB, void \fP\fIbuf\fP\fB[\fP\fIsize\fP\fB], size_t \fP\fIsize\fP\fB,\fP \fB int \fP\fIflags\fP\fB);\fP \fBssize_t recvfrom(\fPsize_t size; \fB int \fP\fIsockfd\fP\fB, void \fP\fIbuf\fP\fB[restrict \fP\fIsize\fP\fB], size_t \fP\fIsize\fP\fB,\fP \fB int \fP\fIflags\fP\fB,\fP \fB struct sockaddr *_Nullable restrict \fP\fIsrc_addr\fP\fB,\fP \fB socklen_t *_Nullable restrict \fP\fIaddrlen\fP\fB);\fP \fBssize_t recvmsg(int \fP\fIsockfd\fP\fB, struct msghdr *\fP\fImsg\fP\fB, int \fP\fIflags\fP\fB);\fP .fi .SH الوصف استدعاءات \fBrecv\fP() و \fBrecvfrom\fP() و \fBrecvmsg\fP() تُستخدم لاستقبال رسائل من مقبس. يمكن استخدامها لاستقبال بيانات على كل من المقابس غير المتصلة والموجهة نحو الاتصال. تصف هذه الصفحة أولاً الميزات المشتركة لجميع استدعاءات النظام الثلاثة، ثم تصف الاختلافات بين الاستدعاءات. .P الفرق الوحيد بين \fBrecv\fP() و \fBread\fP(2) هو وجود \fIflags\fP. مع وسيطة \fIflags\fP صفرية، يكون \fBrecv\fP() مكافئًا بشكل عام لـ \fBread\fP(2) (لكن انظر الملاحظات). أيضًا، الاستدعاء التالي .P .in +4n .EX recv(sockfd, buf, size, flags); .EE .in .P يكافئ .P .in +4n .EX recvfrom(sockfd, buf, size, flags, NULL, NULL); .EE .in .P تعيد جميع الاستدعاءات الثلاثة حجم الرسالة عند الإكمال بنجاح. إذا كانت الرسالة طويلة جدًا بحيث لا تتسع في المخزن المؤقت المقدم، فقد يتم تجاهل البايتات الزائدة اعتمادًا على نوع المقبس الذي تُستقبل منه الرسالة. .P إذا لم تكن هناك رسائل متاحة في المقبس، تنتظر استدعاءات الاستقبال وصول رسالة، ما لم يكن المقبس غير محظور (انظر \fBfcntl\fP(2))، وفي هذه الحالة تُعاد القيمة \-1 ويُضبط \fIerrno\fP على \fBEAGAIN\fP أو \fBEWOULDBLOCK\fP. تعيد استدعاءات الاستقبال عادةً أي بيانات متاحة، حتى المقدار المطلوب، بدلاً من انتظار استلام المقدار الكامل المطلوب. .P يمكن للتطبيق استخدام \fBselect\fP(2) أو \fBpoll\fP(2) أو \fBepoll\fP(7) لتحديد موعد وصول المزيد من البيانات على مقبس. .SS "معامل العلامات (flags)" تُشكل وسيطة \fIflags\fP عن طريق إجراء عملية OR على قيمة واحدة أو أكثر من القيم التالية: .TP \fBMSG_CMSG_CLOEXEC\fP (\fBrecvmsg\fP() فقط؛ منذ Linux 2.6.23) يضبط علم الإغلاق عند التنفيذ لواصف الملف المستلم عبر واصف ملف نطاق UNIX باستخدام عملية \fBSCM_RIGHTS\fP (الموصوفة في \fBunix\fP(7)). هذا العلم مفيد لنفس أسباب علم \fBO_CLOEXEC\fP الخاص بـ \fBopen\fP(2). .TP \fBMSG_DONTWAIT\fP (منذ لينكس 2.2) يمكّن التشغيل غير المحظور؛ إذا كانت العملية ستحظر، يفشل الاستدعاء مع \fBEAGAIN\fP أو \fBEWOULDBLOCK\fP. يوفر هذا سلوكًا مشابهًا لضبط علم \fBO_NONBLOCK\fP (عبر عملية \fBfcntl\fP(2) \fBF_SETFL\fP)، لكنه يختلف في أن \fBMSG_DONTWAIT\fP هو خيار لكل استدعاء، بينما \fBO_NONBLOCK\fP هو إعداد على وصف الملف المفتوح (انظر \fBopen\fP(2))، والذي سيؤثر على جميع سلاسل التنفيذ في العملية المستدعية وكذلك العمليات الأخرى التي تحمل واصفات ملفات تشير إلى نفس وصف الملف المفتوح. .TP \fBMSG_ERRQUEUE\fP (منذ Linux 2.2) يحدد هذا العلم أنه يجب استقبال الأخطاء المُصطفة من قائمة انتظار أخطاء المقبس. يُمرر الخطأ في رسالة مساعدة بنوع يعتمد على البروتوكول (لـ IPv4 \fBIP_RECVERR\fP). يجب على المستخدم توفير مخزن مؤقت بحجم كافٍ. انظر \fBcmsg\fP(3) و \fBip\fP(7) لمزيد من المعلومات. يُمرر حمولة الحزمة الأصلية التي تسببت في الخطأ كبيانات عادية عبر \fImsg_iovec\fP. يُمرر عنوان الوجهة الأصلي للرزمة التي تسببت في الخطأ عبر \fImsg_name\fP. .IP يُقدم الخطأ في بنية \fIsock_extended_err\fP: .IP .in +4n .EX #define SO_EE_ORIGIN_NONE 0 #define SO_EE_ORIGIN_LOCAL 1 #define SO_EE_ORIGIN_ICMP 2 #define SO_EE_ORIGIN_ICMP6 3 \& struct sock_extended_err { uint32_t ee_errno; /* Error number */ uint8_t ee_origin; /* Where the error originated */ uint8_t ee_type; /* Type */ uint8_t ee_code; /* Code */ uint8_t ee_pad; /* Padding */ uint32_t ee_info; /* Additional information */ uint32_t ee_data; /* Other data */ /* More data may follow */ }; \& struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *); .EE .in .IP يحتوي \fIee_errno\fP على رقم \fIerrno\fP للخطأ المُصطف. \fIee_origin\fP هو رمز الأصل لمكان نشأة الخطأ. الحقول الأخرى خاصة بالبروتوكول. تعيد الماكرو \fBSO_EE_OFFENDER\fP مؤشرًا إلى عنوان كائن الشبكة حيث نشأ الخطأ، معطى مؤشرًا إلى الرسالة المساعدة. إذا كان هذا العنوان غير معروف، يحتوي عضو \fIsa_family\fP من \fIsockaddr\fP على \fBAF_UNSPEC\fP والحقول الأخرى من \fIsockaddr\fP غير معرفة. يُمرر حمولة الحزمة التي تسببت في الخطأ كبيانات عادية. .IP بالنسبة للأخطاء المحلية، لا يُمرر أي عنوان (يمكن التحقق من ذلك باستخدام عضو \fIcmsg_len\fP من \fIcmsghdr\fP). لاستقبالات الأخطاء، يُضبط علم \fBMSG_ERRQUEUE\fP في \fImsghdr\fP. بعد تمرير خطأ، يُعاد توليد خطأ المقبس المعلق بناءً على الخطأ المُصطف التالي وسيُمرر في عملية المقبس التالية. .TP \fBMSG_OOB\fP يطلب هذا العلم استقبال بيانات خارج النطاق التي لن تُستقبل في تيار البيانات العادي. تضع بعض البروتوكولات البيانات المعجلة في رأس قائمة انتظار البيانات العادية، وبالتالي لا يمكن استخدام هذا العلم مع هذه البروتوكولات. .TP \fBMSG_PEEK\fP يتسبب هذا العلم في إعادة عملية الاستقبال للبيانات من بداية قائمة انتظار الاستقبال دون إزالة تلك البيانات من القائمة. وبالتالي، سيعيد استدعاء استقبال لاحق نفس البيانات. .TP \fBMSG_TRUNC\fP (منذ Linux 2.2) .\" commit 9f6f9af7694ede6314bed281eec74d588ba9474f للمقابس الخام (\fBAF_PACKET\fP)، ورزم الإنترنت (منذ Linux 2.4.27/2.6.8)، وnetlink (منذ Linux 2.6.22)، ورزم UNIX وكذلك الحزم المتسلسلة (منذ Linux 3.4): إعادة الحجم الحقيقي للحزمة أو الرزمة، حتى عندما كانت أطول من المخزن المؤقت الممرر. .IP للاستخدام مع مقابس تيار الإنترنت، انظر \fBtcp\fP(7). .TP \fBMSG_WAITALL\fP (منذ Linux 2.2) .\" يطلب هذا العلم أن تحظر العملية حتى يتم تلبية الطلب بالكامل. ومع ذلك، قد لا يزال الاستدعاء يعيد بيانات أقل من المطلوب إذا تم التقاط إشارة، أو حدث خطأ أو قطع اتصال، أو كانت البيانات التالية المراد استقبالها من نوع مختلف عن تلك المُعادة. ليس لهذا العلم أي تأثير على مقابس الرزم. .SS recvfrom() يضع \fBrecvfrom\fP() الرسالة المستلمة في المخزن المؤقت \fIbuf\fP. يجب على المستدعي تحديد حجم المخزن المؤقت في \fIsize\fP. .P .\" (Note: for datagram sockets in both the UNIX and Internet domains, .\" .I src_addr .\" is filled in. .\" .I src_addr .\" is also filled in for stream sockets in the UNIX domain, but is not .\" filled in for stream sockets in the Internet domain.) .\" [The above notes on AF_UNIX and AF_INET sockets apply as at .\" Kernel 2.4.18. (MTK, 22 Jul 02)] إذا كانت \fIsrc_addr\fP غير NULL، وكان البروتوكول الأساسي يوفر عنوان مصدر الرسالة، يتم وضع عنوان المصدر هذا في المخزن المؤقت الذي تشير إليه \fIsrc_addr\fP. في هذه الحالة، تكون \fIaddrlen\fP معلمة قيمة\-نتيجة. قبل الاستدعاء، يجب تهيئتها بحجم المخزن المؤقت المرتبط بـ \fIsrc_addr\fP. عند العودة، يحدّث \fIaddrlen\fP ليحتوي على الحجم الفعلي لعنوان المصدر. ًيُقتطع العنوان المُرجع إذا كان المخزن المؤقت المُقدّم صغيرًا جدًّا؛ وفي هذه الحالة، سيعيد \fIaddrlen\fP قيمة أكبر من تلك التي تم تزويدها للاستدعاء. .P .\" إذا لم يكن المستدعي مهتمًا بعنوان المصدر، فيجب تحديد \fIsrc_addr\fP و \fIaddrlen\fP كقيمة NULL. .SS recv() عادةً ما يُستخدم استدعاء \fBrecv\fP() فقط على مقبس \fIموصل\fP (انظر \fBconnect\fP(2)). وهو مكافئ للاستدعاء: .P .in +4n .EX recvfrom(fd, buf, size, flags, NULL, NULL); .EE .in .\" .SS recvmsg() يستخدم استدعاء \fBrecvmsg\fP() بنية \fImsghdr\fP لتقليل عدد الوسائط المقدمة مباشرة. تُعرف هذه البنية كما يلي في \fI\fP: .P .in +4n .EX struct msghdr { void *msg_name; /* عنوان اختياري */ socklen_t msg_namelen; /* حجم العنوان */ struct iovec *msg_iov; /* مصفوفة توزيع/تجميع */ size_t msg_iovlen; /* عدد العناصر في msg_iov */ void *msg_control; /* بيانات مساعدة، انظر أدناه */ size_t msg_controllen; /* حجم مخزن البيانات المساعدة */ int msg_flags; /* أعلام على الرسالة المستلمة */ }; .EE .in .P يشير حقل \fImsg_name\fP إلى مخزن مخصص من قبل المستدعي يُستخدم لإرجاع عنوان المصدر إذا كان المقبس غير موصل. يجب على المستدعي تعيين \fImsg_namelen\fP إلى حجم هذا المخزن قبل هذا الاستدعاء؛ عند العودة من استدعاء ناجح، سيحتوي \fImsg_namelen\fP على حجم العنوان المُعاد. إذا لم يكن التطبيق بحاجة لمعرفة عنوان المصدر، يمكن تحديد \fImsg_name\fP كقيمة NULL. .P تصف الحقول \fImsg_iov\fP و \fImsg_iovlen\fP مواقع التوزيع والتجميع، كما نوقش في \fBreadv\fP(2). .P يشير حقل \fImsg_control\fP، الذي له حجم \fImsg_controllen\fP، إلى مخزن للرسائل الأخرى المتعلقة بالتحكم في البروتوكول أو البيانات المساعدة المتنوعة. عند استدعاء \fBrecvmsg\fP()، يجب أن يحتوي \fImsg_controllen\fP على حجم المخزن المتاح في \fImsg_control\fP؛ عند العودة من استدعاء ناجح، سيحتوي على حجم تسلسل رسائل التحكم. .P الرسائل تكون بالشكل: .P .in +4n .EX struct cmsghdr { size_t cmsg_len; /* عدد بايتات البيانات، بما في ذلك الرأس (النوع هو socklen_t في POSIX) */ int cmsg_level; /* البروتوكول المصدر */ int cmsg_type; /* نوع خاص بالبروتوكول */ /* يتبعه unsigned char cmsg_data[]; */ }; .EE .in .P يجب الوصول إلى البيانات المساعدة فقط من خلال وحدات الماكرو المعرفة في \fBcmsg\fP(3). .P كمثال، تستخدم لينكس آلية البيانات المساعدة هذه لتمرير الأخطاء الموسعة، خيارات IP، أو واصفات الملفات عبر مقابس نطاق UNIX. لمزيد من المعلومات حول استخدام البيانات المساعدة في نطاقات المقابس المختلفة، انظر \fBunix\fP(7) و \fBip\fP(7). .P يتم تعيين حقل \fImsg_flags\fP في \fImsghdr\fP عند عودة \fBrecvmsg\fP(). يمكن أن يحتوي على عدة أعلام: .TP \fBMSG_EOR\fP يشير إلى نهاية السجل؛ البيانات المُعادة أكملت سجلًا (بشكل عام، يُستخدم مع مقابس من نوع \fBSOCK_SEQPACKET\fP). .TP \fBMSG_TRUNC\fP يشير إلى أن الجزء الخلفي من مخطط البيانات تم تجاهله لأن مخطط البيانات كان أكبر من المخزن المقدم. .TP \fBMSG_CTRUNC\fP يشير إلى أن بعض بيانات التحكم تم تجاهلها بسبب نقص المساحة في المخزن للبيانات المساعدة. .TP \fBMSG_OOB\fP يُعاد للإشارة إلى أن بيانات عاجلة أو خارج النطاق تم استلامها. .TP \fBMSG_ERRQUEUE\fP يشير إلى أنه لم يتم استلام أي بيانات ولكن خطأ موسع من قائمة أخطاء المقبس. .TP \fBMSG_CMSG_CLOEXEC\fP (منذ لينكس 2.6.23) .\" commit 4a19542e5f694cd408a32c3d9dc593ba9366e2d7 يشير إلى أن \fBMSG_CMSG_CLOEXEC\fP تم تحديده في وسيطة \fIflags\fP لـ \fBrecvmsg\fP(). .SH "قيمة الإرجاع" تُعيد هذه الاستدعاءات عدد البايتات المستلمة، أو \-1 إذا حدث خطأ. في حالة حدوث خطأ، يتم تعيين \fIerrno\fP للإشارة إلى الخطأ. .P عندما يقوم نظير مقبس التدفق بإغلاق منظم، ستكون القيمة المُعادة 0 (الإرجاع التقليدي "نهاية الملف"). .P تسمح مقابس مخططات البيانات في نطاقات مختلفة (مثل نطاقات UNIX والإنترنت) بمخططات بيانات بحجم صفر. عند استلام مثل هذا المخطط، تكون القيمة المُعادة 0. .P قد تُعاد القيمة 0 أيضًا إذا كان عدد البايتات المطلوب استلامها من مقبس تدفق هو 0. .SH الأخطاء هذه بعض الأخطاء القياسية التي تولدها طبقة المقبس. قد تُولد أخطاء إضافية وتُعاد من وحدات البروتوكول الأساسية؛ راجع صفحات دليلها. .TP \fBEAGAIN\fP أو \fBEWOULDBLOCK\fP .\" Actually EAGAIN on Linux المقبس مُعلّم كغير محظور وعملية الاستقبال ستحظر، أو ضُبط مهلة استقبال وانتهت المهلة قبل استلام البيانات. يسمح POSIX.1 بإرجاع أي من الخطأين لهذه الحالة، ولا يتطلب أن تكون هذه الثوابت بنفس القيمة، لذا يجب على التطبيق المحمول التحقق من كلا الاحتمالين. .TP \fBEBADF\fP الوسيطة \fIsockfd\fP هي واصف ملف غير صالح. .TP \fBECONNREFUSED\fP رفض مضيف بعيد السماح باتصال الشبكة (عادةً لأنه لا يشغل الخدمة المطلوبة). .TP \fBEFAULT\fP مؤشرات المخزن المؤقت للاستقبال تشير إلى خارج مساحة عنوان العملية. .TP \fBEINTR\fP قُطعت عملية الاستقبال بتسليم إشارة قبل توفر أي بيانات؛ انظر \fBsignal\fP(7). .TP \fBEINVAL\fP .\" e.g., msg_namelen < 0 for recvmsg() or addrlen < 0 for recvfrom() مُرر معامل غير صالح. .TP \fBENOMEM\fP تعذر تخصيص ذاكرة لـ \fBrecvmsg\fP(). .TP \fBENOTCONN\fP المقبس مرتبط ببروتوكول موجه للاتصال ولم يُوصل (انظر \fBconnect\fP(2) و \fBaccept\fP(2)). .TP \fBENOTSOCK\fP واصف الملف \fIsockfd\fP لا يشير إلى مقبس. .SH الإصدارات .\" POSIX.1-2001, POSIX.1-2008 .\" glibc bug for msg_controllen raised 12 Mar 2006 .\" http://sourceware.org/bugzilla/show_bug.cgi?id=2448 .\" The problem is an underlying kernel issue: the size of the .\" __kernel_size_t type used to type these fields varies .\" across architectures, but socklen_t is always 32 bits, .\" as (at least with GCC) is int. وفقًا لـ POSIX.1، يجب أن يكون حقل \fImsg_controllen\fP في بنية \fImsghdr\fP من النوع \fIsocklen_t\fP، وحقل \fImsg_iovlen\fP من النوع \fIint\fP، لكن glibc حاليًا يكتب كليهما كـ \fIsize_t\fP. .SH المعايير POSIX.1\-2024. .SH التاريخ POSIX.1\-2001،‏ 4.2BSD. .P يصف POSIX.1 فقط الأعلام \fBMSG_OOB\fP و \fBMSG_PEEK\fP و \fBMSG_WAITALL\fP. .SH ملاحظات إذا كان هناك مخطط بيانات بحجم صفري معلق، فإن \fBread\fP(2) و \fBrecv\fP() مع وسيطة \fIflags\fP بقيمة صفر توفر سلوكًا مختلفًا. في هذه الحالة، لا تأثير لـ \fBread\fP(2) (يبقى مخطط البيانات معلقًا)، بينما تستهلك \fBrecv\fP() مخطط البيانات المعلق. .P انظر \fBrecvmmsg\fP(2) للحصول على معلومات حول استدعاء نظام خاص بلينكس يمكن استخدامه لاستقبال مخططات بيانات متعددة في استدعاء واحد. .SH أمثلة مثال على استخدام \fBrecvfrom\fP() موضح في \fBgetaddrinfo\fP(3). .SH "انظر أيضًا" \fBfcntl\fP(2), \fBgetsockopt\fP(2), \fBread\fP(2), \fBrecvmmsg\fP(2), \fBselect\fP(2), \fBshutdown\fP(2), \fBsocket\fP(2), \fBcmsg\fP(3), \fBsockatmark\fP(3), \fBip\fP(7), \fBipv6\fP(7), \fBsocket\fP(7), \fBtcp\fP(7), \fBudp\fP(7), \fBunix\fP(7) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .