Если мы посмотрим на IO/Socket/INET.pm
, мы увидим следующее:
my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1;
Это говорит мне о том, что EINVAL
не везде доступно. Парены в Errno::EINVAL()
в константе, которые будут отсутствовать, пока не будут вызваны, что никогда не будет из-за проверки.
Теперь, если мы посмотрим на IO/Socket.pm
, мы увидим, что EINVAL
ожидается присутствовать во время компиляции.
elsif (!connect($sock,$addr) &&
not ($!{EISCONN} || ($^O eq 'MSWin32' &&
($! == (($] < 5.019004) ? 10022 : Errno::EINVAL))))
) {
# Some systems refuse to re-connect() to
# an already open socket and set errno to EISCONN.
# Windows sets errno to WSAEINVAL (10022) (pre-5.19.4) or
# EINVAL (22) (5.19.4 onwards).
$err = $!;
$@ = "connect: $!";
}
Чтобы обойти эту проблему, замените Errno::EINVAL
на 22
в dist/IO/lib/IO/Socket.pm
.
Как только это будет сделано, перезапустите make
. (Это должно привести к lib/IO/Socket.pm
с изменением. Если оно не получит изменение, попробуйте удалить lib/IO/Socket.pm
и снова запустить make
.)