我正在尝试使用Perl中的Net :: RawIP通过TCP发送一些数据。不幸的是我收到了错误
sendto()位于/usr/lib/x86_64-linus-gnu/perl5/5.24/Net/RawIP.pm第630行
如果TCP数据字段大于大约1470个字符:
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;
崩溃。任何想法为什么会这样?
答案 0 :(得分:2)
您正在构建too large的数据包,因此sendto
返回错误EMSGSIZE
。
EMSGSIZE
套接字类型要求以原子方式发送消息,并且要发送的消息大小使这变得不可能。
它开始在1500左右失败并不神秘;这是以太网帧可以承载的最大值。
您需要使用多个数据包或多个数据包碎片。