2017-10-25 2 views
0

Ich versuche, einige Daten über TCP mit Net :: RawIP in Perl zu senden. Leider bekomme ich den FehlerPerl RawIP maximale Datengröße

sendto() bei /usr/lib/x86_64-linus-gnu/perl5/5.24/Net/RawIP.pm Linie 630

, wenn das TCP-Datenfeld größer ist als etwa 1470 Zeichen:

my $n = Net::RawIP->new({ 
         ip => { 
           saddr => '[src]', 
           daddr => '[dst]', 
           }, 
         tcp => { 
           source => 7777, 
           dest => 7777, 
           data => "x" x 150 
          } 
         }); 
    $n->send; 

funktioniert, aber

my $n = Net::RawIP->new({ 
         ip => { 
           saddr => '[src]', 
           daddr => '[dst]', 
           }, 
         tcp => { 
           source => 7777, 
           dest => 7777, 
           data => "x" x 1500 # size changed here 
          } 
         }); 
    $n->send; 

stürzt ab. Irgendwelche Ideen, warum das passiert?

+0

@toolic, Das ist die Schuld des Moduls. ('krächzen (" sendto() ");' in 'util.c') – ikegami

+0

Sie haben Recht, mit' strace' bekomme ich 'EMSGSIZE (Nachricht zu lang)'. Ich stelle die MTU über den Netzwerkmanager automatisch auf (auch wirklich hohe Werte getestet), bekomme aber trotzdem den Fehler ... – Flip

Antwort

2

Sie erstellen ein Paket, das too large ist, also gibt sendto Fehler EMSGSIZE zurück.

EMSGSIZE
Der Socket-Typ erfordert, dass Nachricht atomar gesendet werden, und die Größe der Nachricht diese verunmöglicht gesendet werden.

Es ist kein Geheimnis, dass es beginnt um 1500 zu versagen; das ist das Maximum, das ein Ethernet-Frame tragen kann.

Sie müssen mehrere Pakete oder mehrere Paketfragmente verwenden.

Verwandte Themen