Puffergröße für das Lesen von UDP-Paketen in Python
Ich versuche heraus zu finden /passen Sie die Größe der Netzwerk-Puffer:
import socket
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.getsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF)
212992
Was auf der Erde ist das? ~ 0.2 MB ..!?
Allerdings, wenn ich bin auf der Suche für die Puffergröße, die anderswo, d.h. auf der Kommandozeile:
sampsa@sampsa-xps13:~/python/sockets$ cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304
.. Bekomme ich 4096 bytes.
Lassen Sie uns versuchen, um die Größe des Puffers festzulegen und dann seinen Wert:
sock.setsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF,1024)
sock.getsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF)
2304
Was ist Los?
Ersetzen SOL_SOCKET mit SOL_UDP gibt "Protokoll nicht vorhanden"
Wie kann ich einstellen das max. Größe des UDP-Pakets .. oder sogar finden Sie es heraus?
- RCVBUF hat das nicht viel zu tun mit die maximale Größe eines UDP-Paket, sondern vor allem, wie viel Daten gepuffert werden, bevor Sie verworfen, wenn die Anwendung nicht schnell genug ist, Sie zu Lesen. Es ist also eine socket-Eigenschaft und nicht mit UDP. Die maximale Größe eines UDP-Pakets ist 64 Kb.
- Danke .. ja, äh.. das ist genau das, was ich wollte-Zustand. Ich wollte sagen, wie finde ich heraus / stellen Sie die Größe des Puffers
- Und, btw, sind die Netzwerk-sockets FIFO ? first in - first verworfen, wenn der Puffer wird gesättigt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Weise hast du mit
SO_RCVBUF
richtig war. Aber beachten Sie, dass je nach Einstellung und auf dein OS könnte man unterschiedliche Werte zurück, die mitgetsockopt
als du mitsetsockopt
. Auf Linux-Buchse(7) besagt:Soweit ich weiß, wenn der Puffer voll ist, empfangen wird scheitern. Es wird nicht zu verwerfen, das bereits empfangene aber nicht verarbeitete Daten, um Platz zu machen für neue Daten.
getsockopt
.