.\" -*- coding: UTF-8 -*- .\" Copyright 2012, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sendmmsg 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم sendmmsg \- إرسال رسائل متعددة على مقبس .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#define _GNU_SOURCE\fP /* انظر feature_test_macros(7) */ \fB#include \fP .P \fBint sendmmsg(\fPunsigned int n; \fB int \fP\fIsockfd\fP\fB, struct mmsghdr \fP\fImsgvec\fP\fB[\fP\fIn\fP\fB], unsigned int \fP\fIn\fP\fB,\fP \fB int \fP\fIflags\fP\fB);\fP .fi .SH الوصف .\" See commit 228e548e602061b08ee8e8966f567c12aa079682 استدعاء النظام \fBsendmmsg\fP() هو امتداد لـ \fBsendmsg\fP(2) يسمح للمستدعي بإرسال رسائل متعددة على مقبس باستخدام استدعاء نظام واحد. (هذا يوفر فوائد أداء لبعض التطبيقات.) .P الوسيط \fIsockfd\fP هو واصف ملف المقبس الذي سيتم إرسال البيانات عليه. .P المعامل \fImsgvec\fP هو مؤشر لمصفوفة من هياكل \fImmsghdr\fP. حُدد حجم هذه المصفوفة في \fIn\fP. .P عُرف هيكل \fImmsghdr\fP في \fI\fP كالتالي: .P .in +4n .EX struct mmsghdr { struct msghdr msg_hdr; /* رأس الرسالة */ unsigned int msg_len; /* عدد البايتات المرسلة */ }; .EE .in .P الحقل \fImsg_hdr\fP هو بنية \fImsghdr\fP، كما هو موصوف في \fBsendmsg\fP(2). يُستخدم الحقل \fImsg_len\fP لإرجاع عدد البايتات المرسلة من الرسالة في \fImsg_hdr\fP (أي نفس قيمة الإرجاع من استدعاء \fBsendmsg\fP(2) واحد). .P الوسيط \fIflags\fP يحتوي على أعلام مدمجة بعملية OR. الأعلام هي نفسها المستخدمة في \fBsendmsg\fP(2). .P استدعاء \fBsendmmsg\fP() المحظور يظل محظورًا حتى يتم إرسال \fIn\fP رسالة. الاستدعاء غير المحظور يرسل أكبر عدد ممكن من الرسائل (حتى الحد المحدد بواسطة \fIn\fP) ويعود فورًا. .P عند العودة من \fBsendmmsg\fP()، يتم تحديث حقول \fImsg_len\fP للعناصر المتتالية من \fImsgvec\fP لتحتوي على عدد البايتات المرسلة من \fImsg_hdr\fP المقابل. تشير قيمة إرجاع الاستدعاء إلى عدد عناصر \fImsgvec\fP التي تم تحديثها. .SH "قيمة الإرجاع" عند النجاح، يُرجع \fBsendmmsg\fP() عدد الرسائل المرسلة من \fImsgvec\fP؛ إذا كان هذا أقل من \fIn\fP، يمكن للمستدعي إعادة المحاولة باستدعاء \fBsendmmsg\fP() آخر لإرسال الرسائل المتبقية. .P عند الخطأ، تُعاد القيمة \-1، ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .\" commit 728ffb86f10873aaf4abd26dde691ee40ae731fe .\" ...only return an error if no datagrams could be sent. .\" If less than the requested number of messages were sent, the application .\" must retry starting at the first failed one and if the problem is .\" persistent the error will be returned. .\" .\" This matches the behavior of other syscalls like read/write - it .\" is not an error if less than the requested number of elements are sent. الأخطاء هي نفسها لـ \fBsendmsg\fP(2). يتم إرجاع خطأ فقط إذا لم يمكن إرسال أي رزم بيانات. انظر أيضًا الأخطاء. .SH المعايير لينكس. .SH التاريخ لينكس 3.0، glibc 2.14. .SH ملاحظات .\" commit 98382f419f32d2c12d021943b87dea555677144b .\" net: Cap number of elements for sendmmsg .\" .\" To limit the amount of time we can spend in sendmmsg, cap the .\" number of elements to UIO_MAXIOV (currently 1024). .\" .\" For error handling an application using sendmmsg needs to retry at .\" the first unsent message, so capping is simpler and requires less .\" application logic than returning EINVAL. القيمة المحددة في \fIn\fP محدودة بـ \fBUIO_MAXIOV\fP (1024). .SH العلل إذا حدث خطأ بعد إرسال رسالة واحدة على الأقل، ينجح الاستدعاء، ويعيد عدد الرسائل المرسلة. يُفقد رمز الخطأ. يمكن للمستدعي إعادة محاولة الإرسال، بدءًا من أول رسالة فاشلة، ولكن لا يوجد ضمان بأنه، إذا تم إرجاع خطأ، سيكون هو نفسه الذي فُقد في الاستدعاء السابق. .SH أمثلة المثال أدناه يستخدم \fBsendmmsg\fP() لإرسال \fIonetwo\fP و \fIthree\fP في رزمتي UDP منفصلتين باستخدام استدعاء نظام واحد. محتويات أول رزمة تأتي من زوج من المخازن المؤقتة. .P .\" SRC BEGIN (sendmmsg.c) .EX #define _GNU_SOURCE #include #include #include #include #include #include #include \& int main(void) { int retval; int sockfd; struct iovec msg1[2], msg2; struct mmsghdr msg[2]; struct sockaddr_in addr; \& sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd == \-1) { perror("socket()"); exit(EXIT_FAILURE); } \& addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); addr.sin_port = htons(1234); if (connect(sockfd, (struct sockaddr *) &addr, sizeof(addr)) == \-1) { perror("connect()"); exit(EXIT_FAILURE); } \& memset(msg1, 0, sizeof(msg1)); msg1[0].iov_base = "one"; msg1[0].iov_len = 3; msg1[1].iov_base = "two"; msg1[1].iov_len = 3; \& memset(&msg2, 0, sizeof(msg2)); msg2.iov_base = "three"; msg2.iov_len = 5; \& memset(msg, 0, sizeof(msg)); msg[0].msg_hdr.msg_iov = msg1; msg[0].msg_hdr.msg_iovlen = 2; \& msg[1].msg_hdr.msg_iov = &msg2; msg[1].msg_hdr.msg_iovlen = 1; \& retval = sendmmsg(sockfd, msg, 2, 0); if (retval == \-1) perror("sendmmsg()"); else printf("%d messages sent\[rs]n", retval); \& exit(0); } .EE .\" SRC END .SH "انظر أيضًا" \fBrecvmmsg\fP(2), \fBsendmsg\fP(2), \fBsocket\fP(2), \fBsocket\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 .