Frage

Ich habe eine Implementierung, die ioctl verwendet (FIONREAD) die Anzahl der ausstehenden Bytes in der Raw-Socket Empfangspuffer in Linux zu bestimmen, und rufen Sie dann eine recv, dass auf.

Ich habe irgendwo gelesen, dass die ioctl-Schnittstelle für Raw Sockets in Linux nicht wirklich das tatsächliche anstehende Oktetts zurück. Ist das richtig?

Ich frage, weil ich einige Nachrichten, bei denen ab und zu auf hohe Belastungen und bisher habe in der Lage, um herauszufinden, bin zu verlieren. Gibt es einen besseren Weg, um die Anzahl der ausstehenden Bytes in der Raw-Socket zu verstehen.

War es hilfreich?

Lösung

Es gibt immer die Möglichkeit, dass die Kernel-Pakete fallen wird, wenn die Anwendung nicht in der Lage ist mit dem Paketrate zu halten (wie der Kernel-Puffer nicht unbegrenzt ist).

BTW, warum brauchen Sie sowieso die Anzahl von Bytes wissen? Da diese Paket Steckdosen sind, wird die Länge eines Pakets immer durch die maximale Bildgröße der Netzwerkschnittstelle begrenzt werden, so passieren nur groß genug, um recv puffern.

Having said that, wenn die Leistung entscheidend ist, sollte man sich in PACKET_MMAP Unterstützung unter Linux.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top