.\" -*- 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 send 2 "29 أكتوبر 2025" "صفحات دليل لينكس 6.18" .SH الاسم send, sendto, sendmsg \- إرسال رسالة على مقبس .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBssize_t send(\fPsize_t size; \fB int \fP\fIsockfd\fP\fB, const void \fP\fIbuf\fP\fB[\fP\fIsize\fP\fB], size_t \fP\fIsize\fP\fB, int \fP\fIflags\fP\fB);\fP \fBssize_t sendto(\fPsize_t size; \fB int \fP\fIsockfd\fP\fB, const void \fP\fIbuf\fP\fB[\fP\fIsize\fP\fB], size_t \fP\fIsize\fP\fB, int \fP\fIflags\fP\fB,\fP \fB const struct sockaddr *\fP\fIdest_addr\fP\fB, socklen_t \fP\fIaddrlen\fP\fB);\fP \fBssize_t sendmsg(int \fP\fIsockfd\fP\fB, const struct msghdr *\fP\fImsg\fP\fB, int \fP\fIflags\fP\fB);\fP .fi .SH الوصف استدعاءات النظام \fBsend\fP() و \fBsendto\fP() و \fBsendmsg\fP() تُستخدم لنقل رسالة إلى مقبس آخر. .P استدعاء \fBsend\fP() يمكن استخدامه فقط عندما يكون المقبس في حالة \fIconnected\fP (بحيث يكون المستلم المقصود معروفًا). الفرق الوحيد بين \fBsend\fP() و \fBwrite\fP(2) هو وجود \fIflags\fP. مع وسيطة \fIflags\fP صفرية، يكون \fBsend\fP() مكافئًا لـ \fBwrite\fP(2). أيضًا، الاستدعاء التالي .P .in +4n .EX send(sockfd, buf, size, flags); .EE .in .P يكافئ .P .in +4n .EX sendto(sockfd, buf, size, flags, NULL, 0); .EE .in .P الوسيطة \fIsockfd\fP هي واصف الملف للمقبس المُرسِل. .P إذا استُخدم \fBsendto\fP() على مقبس في وضع الاتصال (\fBSOCK_STREAM\fP، \fBSOCK_SEQPACKET\fP)، تُتجاهل الوسيطتان \fIdest_addr\fP و \fIaddrlen\fP (وقد يُرجع الخطأ \fBEISCONN\fP عندما لا تكونان NULL و0)، ويُرجَع الخطأ \fBENOTCONN\fP عندما لا يكون المقبس متصلًا فعليًا. خلاف ذلك، يُعطى عنوان الهدف بواسطة \fIdest_addr\fP مع تحديد حجمه بواسطة \fIaddrlen\fP. بالنسبة لـ \fBsendmsg\fP()، يُعطى عنوان الهدف بواسطة \fImsg.msg_name\fP، مع تحديد حجمه بواسطة \fImsg.msg_namelen\fP. .P بالنسبة لـ \fBsend\fP() و \fBsendto\fP()، توجد الرسالة في \fIbuf\fP ويكون حجمها \fIsize\fP. بالنسبة لـ \fBsendmsg\fP()، تُشير عناصر المصفوفة \fImsg.msg_iov\fP إلى الرسالة. يسمح استدعاء \fBsendmsg\fP() أيضًا بإرسال بيانات مساعدة (تُعرف أيضًا بمعلومات التحكم). .P إذا كانت الرسالة طويلة جدًا بحيث لا يمكن تمريرها بشكل ذري عبر البروتوكول الأساسي، يُرجَع الخطأ \fBEMSGSIZE\fP، ولا تُنقَل الرسالة. .P لا يوجد إشارة ضمنية لفشل التسليم في \fBsend\fP(). تُشار إلى الأخطاء المُكتشفة محليًا بقيمة إرجاع \-1. .P عندما لا تتسع الرسالة في مخزن الإرسال المؤقت للمقبس، يُحجَز \fBsend\fP() عادةً، إلا إذا وُضِع المقبس في وضع إدخال/إخراج غير محجوز. في الوضع غير المحجوز، سيفشل مع الخطأ \fBEAGAIN\fP أو \fBEWOULDBLOCK\fP في هذه الحالة. يمكن استخدام استدعاء \fBselect\fP(2) لتحديد متى يمكن إرسال المزيد من البيانات. .SS "معامل العلامات (flags)" .\" FIXME . ? document MSG_PROXY (which went away in Linux 2.3.15) الوسيطة \fIflags\fP هي OR أحادي البت لصفر أو أكثر من الأعلام التالية. .TP \fBMSG_CONFIRM\fP (منذ Linux 2.3.15) أخبر طبقة الارتباط بحدوث تقدم أمامي: حصلت على رد ناجح من الجانب الآخر. إذا لم تحصل طبقة الارتباط على ذلك، فستُعيد استقصاء الجار بانتظام (مثلًا عبر ARP أحادي الإرسال). صالح فقط على مقابس \fBSOCK_DGRAM\fP و \fBSOCK_RAW\fP ومُطبَّق حاليًا فقط لـ IPv4 و IPv6. انظر \fBarp\fP(7) للتفاصيل. .TP \fBMSG_DONTROUTE\fP لا تستخدم بوابة لإرسال الحزمة، أرسل إلى المضيفين فقط على الشبكات المتصلة مباشرة. يُستخدم هذا عادةً فقط بواسطة برامج التشخيص أو التوجيه. هذا مُعرَّف فقط لعائلات البروتوكولات التي تُوجّه؛ مقابس الحزم لا تفعل ذلك. .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_EOR\fP (منذ Linux 2.2) يُنهي سجلًا (عندما يكون هذا المفهوم مدعومًا، كما هو الحال لمقابس من النوع \fBSOCK_SEQPACKET\fP). .TP \fBMSG_MORE\fP (منذ Linux 2.4.4) المُستدعي لديه المزيد من البيانات لإرسالها. يُستخدم هذا العلم مع مقابس TCP للحصول على نفس تأثير خيار المقبس \fBTCP_CORK\fP (انظر \fBtcp\fP(7))، مع الفرق أن هذا العلم يمكن تعيينه على أساس كل استدعاء. .IP منذ Linux 2.6، هذا العلم مدعوم أيضًا لمقابس UDP، ويُخبر النواة بتجميع جميع البيانات المُرسلة في استدعاءات مع تعيين هذا العلم في مخطط بيانات واحد يُنقَل فقط عند تنفيذ استدعاء لا يُحدد هذا العلم. (انظر أيضًا خيار المقبس \fBUDP_CORK\fP الموصوف في \fBudp\fP(7).) .TP \fBMSG_NOSIGNAL\fP (منذ Linux 2.2) لا تُنشئ إشارة \fBSIGPIPE\fP إذا أغلق النظير على مقبس موجه للتيار الاتصال. لا يزال الخطأ \fBEPIPE\fP يُرجَع. يوفر هذا سلوكًا مشابهًا لاستخدام \fBsigaction\fP(2) لتجاهل \fBSIGPIPE\fP، لكن بينما \fBMSG_NOSIGNAL\fP هي ميزة لكل استدعاء، فإن تجاهل \fBSIGPIPE\fP يُعيّن سمة عملية تؤثر على جميع الخيوط في العملية. .TP \fBMSG_OOB\fP يُرسل بيانات \fIخارج النطاق\fP على مقابس تدعم هذا المفهوم (مثلًا من النوع \fBSOCK_STREAM\fP)؛ يجب أن يدعم البروتوكول الأساسي أيضًا بيانات \fIخارج النطاق\fP. .TP \fBMSG_FASTOPEN\fP (منذ Linux 3.7) يحاول الفتح السريع لـ TCP (RFC7413) ويُرسل البيانات في SYN مثل مزيج من \fBconnect\fP(2) و \fBwrite\fP(2)، عن طريق تنفيذ عملية \fBconnect\fP(2) ضمنية. يُحجَز حتى تُخزَّن البيانات مؤقتًا ويُكمَل المصافحة. بالنسبة لمقبس غير محجوز، يُرجِع عدد البايتات المُخزَّنة مؤقتًا والمُرسلة في حزمة SYN. إذا لم تكن الكعكة متاحة محليًا، يُرجِع \fBEINPROGRESS\fP، ويُرسل SYN مع طلب كعكة الفتح السريع آليًا. يحتاج المُستدعي إلى كتابة البيانات مرة أخرى عندما يكون المقبس متصلًا. عند الأخطاء، يُعيّن نفس \fIerrno\fP مثل \fBconnect\fP(2) إذا فشلت المصافحة. يتطلب هذا العلم تمكين دعم عميل الفتح السريع لـ TCP على sysctl \fInet.ipv4.tcp_fastopen\fP. .IP راجع خيار المقبس \fBTCP_FASTOPEN_CONNECT\fP في \fBtcp\fP(7) لنهج بديل. .SS sendmsg() تعريف البنية \fImsghdr\fP المستخدمة بواسطة \fBsendmsg\fP() هو كما يلي: .P .in +4n .EX struct msghdr { void *msg_name; /* Optional address */ socklen_t msg_namelen; /* Size of address */ struct iovec *msg_iov; /* Scatter/gather array */ size_t msg_iovlen; /* # elements in msg_iov */ void *msg_control; /* Ancillary data, see below */ size_t msg_controllen; /* Ancillary data buffer size */ int msg_flags; /* Flags (unused) */ }; .EE .in .P يُستخدم الحقل \fImsg_name\fP في مقبس غير متصل لتحديد العنوان الهدف لرزمة بيانات. يشير إلى مخزن يحتوي على العنوان؛ يجب تعيين الحقل \fImsg_namelen\fP إلى حجم العنوان. بالنسبة لمقبس متصل، يجب تحديد هذه الحقول كـ NULL و0 على التوالي. .P تحدد الحقول \fImsg_iov\fP و\fImsg_iovlen\fP مواقع التوزيع والتجميع، كما في \fBwritev\fP(2). .P يمكنك إرسال معلومات التحكم (البيانات المساعدة) باستخدام العضوين \fImsg_control\fP و\fImsg_controllen\fP. الحد الأقصى لحجم مخزن التحكم الذي يمكن للنواة معالجته محدود لكل مقبس بالقيمة في \fI/proc/sys/net/core/optmem_max\fP؛ انظر \fBsocket\fP(7). لمزيد من المعلومات حول استخدام البيانات المساعدة في نطاقات مقابس مختلفة، انظر \fBunix\fP(7) و\fBip\fP(7). .P .\" Still to be documented: .\" Send file descriptors and user credentials using the .\" msg_control* fields. الحقل \fImsg_flags\fP يُتجاهل. .SH "قيمة الإرجاع" عند النجاح، تُرجع هذه الاستدعاءات عدد البايتات المرسلة. عند الخطأ، يُرجع \-1، ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء هذه بعض الأخطاء القياسية التي تُنشئها طبقة المقبس. قد تُنشأ أخطاء إضافية وتُعاد من وحدات البروتوكول الأساسية؛ انظر صفحات الدليل الخاصة بها. .TP \fBEACCES\fP (لمقابس نطاق UNIX، التي تُحدد بمسار اسم) يُرفض إذن الكتابة على ملف المقبس الهدف، أو يُرفض إذن البحث لأحد أدلة بادئة المسار. (انظر \fBpath_resolution\fP(7).) .IP (لمقابس UDP) جرت محاولة للإرسال إلى عنوان شبكة/بث كما لو كان عنوانًا أحاديًا. .TP \fBEAGAIN\fP أو \fBEWOULDBLOCK\fP .\" Actually EAGAIN on Linux المقبس مُعلّم كغير محظور والعملية المطلوبة ستتسبب في حظر. يسمح POSIX.1\-2001 بإرجاع أي من الخطأين لهذه الحالة، ولا يتطلب أن تكون هذه الثوابت بنفس القيمة، لذا يجب على التطبيق المحمول التحقق من كلا الاحتمالين. .TP \fBEAGAIN\fP (مقابس رزم بيانات نطاق الإنترنت) المقبس المشار إليه بواسطة \fIsockfd\fP لم يكن مرتبطًا مسبقًا بعنوان، وعند محاولة ربطه بمنفذ مؤقت، تبيّن أن جميع أرقام المنافذ في نطاق المنافذ المؤقتة قيد الاستخدام حاليًا. انظر مناقشة \fI/proc/sys/net/ipv4/ip_local_port_range\fP في \fBip\fP(7). .TP \fBEALREADY\fP فتح سريع آخر قيد التقدم. .TP \fBEBADF\fP \fIsockfd\fP ليس واصف ملف مفتوح صالح. .TP \fBECONNRESET\fP إعادة تعيين الاتصال من قبل النظير. .TP \fBEDESTADDRREQ\fP المقبس ليس في وضع الاتصال، ولا يوجد عنوان نظير مُضبط. .TP \fBEFAULT\fP عُنوان مساحة مستخدم غير صالح مُحدد لوسيط. .TP \fBEINTR\fP حدثت إشارة قبل إرسال أي بيانات؛ انظر \fBsignal\fP(7). .TP \fBEINVAL\fP مُرر معامل غير صالح. .TP \fBEISCONN\fP المقبس في وضع الاتصال كان متصلاً بالفعل ولكن تم تحديد مستلم. (الآن إما يُرجع هذا الخطأ، أو يُتجاهل تحديد المستلم.) .TP \fBEMSGSIZE\fP .\" (e.g., SOCK_DGRAM ) نوع المقبس يتطلب إرسال الرسالة بشكل ذري، وحجم الرسالة المراد إرسالها جعل ذلك مستحيلاً. .TP \fBENOBUFS\fP طابور الإخراج لواجهة الشبكة كان ممتلئًا. يشير هذا عمومًا إلى أن الواجهة توقفت عن الإرسال، ولكن قد يكون سببه ازدحام مؤقت. (عادةً، لا يحدث هذا في لينكس. تُسقط الرزم بصمت عندما يفيض طابور الجهاز.) .TP \fBENOMEM\fP لا توجد ذاكرة متاحة. .TP \fBENOTCONN\fP المقبس غير متصل، ولم يُعطَ أي هدف. .TP \fBENOTSOCK\fP واصف الملف \fIsockfd\fP لا يشير إلى مقبس. .TP \fBEOPNOTSUPP\fP بعض البتات في وسيط \fIflags\fP غير مناسبة لنوع المقبس. .TP \fBEPIPE\fP الطرف المحلي أُغلق على مقبس موجه للاتصال. في هذه الحالة، ستستقبل العملية أيضًا \fBSIGPIPE\fP ما لم يُضبط \fBMSG_NOSIGNAL\fP. .SH الإصدارات .\" 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\-2001، يجب أن يكون الحقل \fImsg_controllen\fP من البنية \fImsghdr\fP من النوع \fIsocklen_t\fP، والحقل \fImsg_iovlen\fP من النوع \fIint\fP، لكن glibc حاليًا يكتب كليهما كـ \fIsize_t\fP. .SH المعايير POSIX.1\-2024. .P \fBMSG_CONFIRM\fP هو امتداد لينكس. .SH التاريخ 4.4BSD, SVr4, POSIX.1\-2001. (ظهر لأول مرة في 4.2BSD). .P يصف POSIX.1\-2001 فقط العلمين \fBMSG_OOB\fP و\fBMSG_EOR\fP. يضيف POSIX.1\-2008 مواصفات لـ \fBMSG_NOSIGNAL\fP. .SH ملاحظات انظر \fBsendmmsg\fP(2) للحصول على معلومات حول استدعاء نظام خاص بلينكس يمكن استخدامه لنقل رزم بيانات متعددة في استدعاء واحد. .SH العلل قد يُرجع لينكس \fBEPIPE\fP بدلاً من \fBENOTCONN\fP. .SH أمثلة مثال على استخدام \fBsendto\fP() موضح في \fBgetaddrinfo\fP(3). .SH "انظر أيضًا" \fBfcntl\fP(2), \fBgetsockopt\fP(2), \fBrecv\fP(2), \fBselect\fP(2), \fBsendfile\fP(2), \fBsendmmsg\fP(2), \fBshutdown\fP(2), \fBsocket\fP(2), \fBwrite\fP(2), \fBcmsg\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 .