Flip
Flip

Reputation: 35

Perl RawIP maximum data size

I'm trying to send some data over TCP using Net::RawIP in Perl. Unfortunately i get the error

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

if the TCP data field is bigger than about 1470 characters:

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

works, but

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

crashes. Any ideas why this happens?

Upvotes: 0

Views: 95

Answers (1)

ikegami
ikegami

Reputation: 385916

You're building a packet that's too large, so sendto is returning error EMSGSIZE.

EMSGSIZE
The socket type requires that message be sent atomically, and the size of the message to be sent made this impossible.

It's no mystery it starts failing around 1500; that's the maximum an Ethernet frame can carry.

You need to use multiple packets or multiple packet fragments.

Upvotes: 2

Related Questions