ich weiß, daß die Größe des UDP-Pakets, um herauszufinden, vor dem Lesen Sie diese syscall zum Kernel ausgeben kann:wissen udp Paketgröße mit Umfrage wählen oder epoll
ioctl(s,FIONREAD,&num_bytes);
Aber kann ich das gleiche erfahren mit einem der folgenden syscalls?
Der Schlüssel ist, die Größe des Datagramms vor dem Lesen zu kennen, um Speicherplatz für den Puffer zuzuweisen. Dies ist nur für Linux, in C.
verwenden Ich bin ziemlich sicher, 'recvfrom' hat eine' MSG_PEEK' Flag, die Sie verwenden können, um die Anzahl der Bytes in dem Paket abzufragen (Vorschau seines Inhalts ohne es zu entfernen die Warteschlange), die viel portabler wäre als hässliche 'ioctl'-Lösungen ... :-) –
Max. UDP-Datagrammgröße ist 64K, aber erhalten Sie jemals UDP-Nachrichten größer als 1472 Bytes? Welches Protokoll ist das? –
@R. Danke R, guter Tipp. Was ich suchte, ist das Speichern von Syscalls, wenn einige der erwähnten 3 Syscalls mir die Größe des verfügbaren Pakets geben könnten (neben der Benachrichtigung, dass Daten über den zu lesenden Deskriptor verfügbar sind), wäre das sehr hilfreich bei der Geschwindigkeit up den Code (weil ich eine der oben genannten 3 sowieso verwenden muss, wenn die Anwendung auf Eingabe wartet) – Nulik