2017-10-25 16 views
0

PerlでNet :: RawIPを使用してTCP経由でデータを送信しようとしています。 TCPデータフィールドが大きい場合は残念ながら、私はエラーに/usr/lib/x86_64-linus-gnu/perl5/5.24/Net/RawIP.pmライン630Perl RawIPの最大データサイズ

のsendto()を取得します

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

作品が、

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

クラッシュ約1470文字を超えます。これがどうして起こるのか?

+0

@toolicそれはモジュールの欠陥です。 ( 'croak(" sendto() ");' util.c') – ikegami

+0

あなたは正しいです、 'strace'で' EMSGSIZE(Message too long) 'を取得します。私はMTUをネットワークマネージャー経由で自動的にテストしましたが、まだエラーが出ます... – Flip

答えて

2

too largeのパケットを作成しているので、sendtoがエラーEMSGSIZEを返しています。

EMSGSIZE
ソケットタイプは、そのメッセージが不可分に送信することが必要とし、メッセージのサイズは、これは不可能に送信します。

それは約1500の失敗に始まりません。それはイーサネットフレームが運ぶことができる最大です。

複数のパケットまたは複数のパケットフラグメントを使用する必要があります。

関連する問題