.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2012 by Michael Kerrisk .\" with some material from a draft by .\" Stephan Mueller .\" in turn based on Andi Kleen's recvmmsg.2 page. .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sendmmsg 2 "3 mai 2023" "Pagini de manual de Linux 6.05.01" .SH NUME sendmmsg \- trimite mai multe mesaje printr\-un soclu .SH BIBLIOTECA Biblioteca C standard (\fIlibc\fP, \fI\-lc\fP) .SH REZUMAT .nf \fB#define _GNU_SOURCE\fP /* Consultați feature_test_macros(7) */ \fB#include \fP .PP \fBint sendmmsg(int \fP\fIsockfd\fP\fB, struct mmsghdr *\fP\fImsgvec\fP\fB, unsigned int \fP\fIvlen\fP\fB,\fP \fB int \fP\fIflags\fP\fB);\fP .fi .SH DESCRIERE .\" See commit 228e548e602061b08ee8e8966f567c12aa079682 Apelul de sistem \fBsendmmsg\fP() este o extensie a \fBsendmsg\fP(2) care permite apelantului să transmită mai multe mesaje printr\-un soclu folosind un singur apel de sistem; (acest lucru are beneficii de performanță pentru unele aplicații). .PP Argumentul \fIsockfd\fP este descriptorul de fișier al soclului prin care urmează să fie transmise datele. .PP Argumentul \fImsgvec\fP este un indicator la o matrice de structuri \fImmsghdr\fP. Mărimea acestei matrice este specificată în \fIvlen\fP. .PP Structura \fImmsghdr\fP este definită în \fI\fP ca: .PP .in +4n .EX struct mmsghdr { struct msghdr msg_hdr; /* Antetul mesajului */ unsigned int msg_len; /* Numărul de octeți transmiși */ }; .EE .in .PP Câmpul \fImsg_hdr\fP este o structură \fImsghdr\fP, astfel cum este descrisă în \fBsendmsg\fP(2). Câmpul \fImsg_len\fP este utilizat pentru a returna numărul de octeți trimiși din mesaj în \fImsg_hdr\fP (adică aceeași valoare ca cea returnată de la un singur apel \fBsendmsg\fP(2)). .PP Argumentul \fIflags\fP conține fanioane și OR binare combinate împreună. Fanioanele sunt aceleași ca pentru \fBsendmsg\fP(2). .PP Un apel blocant \fBsendmmsg\fP() blochează până când au fost trimise \fIvlen\fP mesaje. Un apel care nu blochează trimite cât mai multe mesaje posibil (până la limita specificată de \fIvlen\fP) și returnează imediat. .PP La returnarea de la \fBsendmmsg\fP(), câmpurile \fImsg_len\fP ale elementelor succesive ale \fImsgvec\fP sunt actualizate pentru a conține numărul de octeți transmis din \fImsg_hdr\fP corespunzător. Valoarea de returnare a apelului indică numărul de elemente din \fImsgvec\fP care au fost actualizate. .SH "VALOAREA RETURNATĂ" În caz de succes, \fBsendmmsg\fP() returnează numărul de mesaje trimise din \fImsgvec\fP; dacă acesta este mai mic decât \fIvlen\fP, apelantul poate încerca din nou cu un alt apel \fBsendmmsg\fP() pentru a trimite mesajele rămase. .PP În caz de eroare, se returnează \-1, iar \fIerrno\fP este configurată pentru a indica eroarea. .SH ERORI\-IEȘIRE .\" 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. Erorile sunt aceleași ca la \fBsendmsg\fP(2). O eroare este returnată numai dacă nu se poate trimite nici un datagramă. A se vedea, de asemenea, secțiunea ERORI. .SH STANDARDE Linux. .SH ISTORIC Linux 3.0, glibc 2.14. .SH NOTE .\" 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. Valoarea specificată în \fIvlen\fP este limitată la \fBUIO_MAXIOV\fP (1024). .SH ERORI Dacă apare o eroare după ce a fost trimis cel puțin un mesaj, apelul reușește și returnează numărul de mesaje trimise. Codul de eroare se pierde. Apelantul poate încerca din nou transmiterea, pornind de la primul mesaj eșuat, dar nu există nicio garanție că, în cazul în care se returnează o eroare, aceasta va fi aceeași cu cea care a fost pierdută la apelul anterior. .SH EXEMPLE Exemplul de mai jos utilizează \fBsendmmsg\fP() pentru a trimite \fIunu\-doi\fP și \fItrei\fP în două datagrame UDP distincte utilizând un singur apel de sistem. Conținutul primei datagrame provine dintr\-o pereche de memorii tampon. .PP .\" 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 = "unu"; msg1[0].iov_len = 3; msg1[1].iov_base = "doi"; msg1[1].iov_len = 3; \& memset(&msg2, 0, sizeof(msg2)); msg2.iov_base = "trei"; 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 mesaje trimise\en", retval); \& exit(0); } .EE .\" SRC END .SH "CONSULTAȚI ȘI" \fBrecvmmsg\fP(2), \fBsendmsg\fP(2), \fBsocket\fP(2), \fBsocket\fP(7) .PP .SH TRADUCERE Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu . .PP Această traducere este documentație gratuită; citiți .UR https://www.gnu.org/licenses/gpl-3.0.html Licența publică generală GNU Versiunea 3 .UE sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE. .PP Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la .MT translation-team-ro@lists.sourceforge.net .ME .