Maximale Pufferlänge für "sendto"?
Wie bekommt man die maximale Anzahl von bytes übergeben werden kann, um eine sendto(..)
Aufruf für ein socket geöffnet, wie ein UDP-port?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bekommt man die maximale Anzahl von bytes übergeben werden kann, um eine sendto(..)
Aufruf für ein socket geöffnet, wie ein UDP-port?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden getsockopt(). Diese Website hat eine gute übersicht der Nutzung und Optionen, die Sie abrufen können.
In Windows, die Sie tun können:
Für Linux, entsprechend zu den UDP-Mann-Seite, wird der kernel verwenden, MTU-discovery (es wird prüfen, was die maximale UDP-Paketgröße ist zwischen hier und dem Ziel, und nehmen Sie diese), oder wenn-MTU-Erkennung ausgeschaltet ist, werden die maximale Größe der interface-MTU und fragment etwas größer. Wenn Sie über Ethernet, die typischen MTU ist 1500 bytes.
Unter Mac OS X gibt es verschiedene Werte senden (SO_SNDBUF) und empfangen (SO_RCVBUF).
Dies ist die Größe des sende-Puffers (man getsockopt):
getsockopt(sock, SOL_SOCKET, SO_SNDBUF, (int *)&optval, &optlen);
Versucht zu senden, eine größere Nachricht (auf Leopard 9216 Bytes des UDP-übertragung über das lokale loopback) führt zu "Nachricht ist zu lang /EMSGSIZE".
Da UDP nicht verbindungsorientiert, es gibt keine Möglichkeit zu zeigen, dass zwei Pakete zusammen gehören. Als ein Ergebnis, Sie sind begrenzt durch die maximale Größe einer einzelnen IP-Paket (65535). Die Daten, die Sie senden können, etwas weniger, weil die IP-Paketgröße beinhaltet auch die IP-header (in der Regel 20 Byte) und der UDP-header (8 bytes).
Beachten Sie, dass dieses IP-Paket fragmentiert werden, um zu passen in kleinere Pakete (zB. ~1500 bytes für ethernet).
Ich bin mir nicht bewusst, irgendwelche OS beschränken diese weiter.