Wenn ein Datagramm-basierter Socket (Raw-Socket oder UDP) mit Sammelsendung verwendet wird, werden alle Daten zu einem einzigen IP-Paket verknüpft. Gibt es eine Möglichkeit, mehrere Datagramme mit einem einzigen Anruf zu senden?Senden Sie mehrere Datagramme mit einem einzigen Aufruf send()?
Antwort
Ich glaube nicht ... Wie würden Sie erwarten, dass der IP-Stack ableitet, wo das Paket-Datagramm sein soll?
Was Sie fragen, ist ein bisschen komisch seit gather-style send() wie der Name sagt sammelt Daten von mehreren Orten im Speicher und fügt sie zusammen in einen Puffer, den sie dann sendet.
Sie haben also mehrere Teile von Daten, die Sie mehrere Datagramme senden möchten. Warum schickst du sie nicht mit separaten Anrufen?
Sie können tatsächlich connect() auf einem Datagramm-Socket aufrufen, um ein Standardziel anzugeben, sodass Sie send() oder write() senden können, ohne jedes Mal die Zieladresse anzugeben.
Der Anruf, den Sie suchen, ist sendmmsg()
, aber es ist noch nicht implementiert oder sogar für viel Diskussion. Sie können sehen, es ist Seite Twin recvmmsg()
in der neuesten 2.6.3 Linux-Kernel erhalten.
Der Systemaufruf [sendmmsg()] (http://man7.org/linux/man-pages/man2/sendmmsg.2.html) wurde in Linux 3.0 hinzugefügt. Unterstützung in glibc wurde in Version 2.14 hinzugefügt. – ecerulm
Jedes iovec ein separates Datagramm? –