Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl AnyEvent::Socket和抽象UNIX套接字_Perl_Anyevent - Fatal编程技术网

Perl AnyEvent::Socket和抽象UNIX套接字

Perl AnyEvent::Socket和抽象UNIX套接字,perl,anyevent,Perl,Anyevent,使用插座,我可以使用: socket(my $socket, AF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; my $sock_addr = sockaddr_un(chr(0).'/abstract/socket'); connect($socket, $sock_addr) or die "connect: $!"; 好的。我连接并可以发送/接收 使用AnyEvent::Socket: tcp_connect "unix/",chr(0

使用插座,我可以使用:

socket(my $socket, AF_UNIX, SOCK_STREAM, 0)
    or die "socket: $!";
my $sock_addr = sockaddr_un(chr(0).'/abstract/socket');
connect($socket, $sock_addr)  or die "connect: $!";
好的。我连接并可以发送/接收

使用AnyEvent::Socket:

tcp_connect "unix/",chr(0).'/abstract/socket' , sub {
    my ($fh) = @_
        or die "unable to connect: $!";
    ...
}
并获取错误:
无法连接:file.pl第X行没有此类设备或地址。


如何将抽象UNIX套接字与Anyevent::Socket一起使用?

您好,我仔细研究了一下,简短的回答是Anyevent::Socket不支持抽象套接字

较长的答案是,它确实应该这样做,就我所知,这是一个小小的疏忽,妨碍了它的工作

sub
resolve_sockaddr
是罪魁祸首,在我的版本中,第718行:

   if ($node eq "unix/") {
      return $cb->() if $family || $service !~ /^\//; # no can do

      return $cb->([AF_UNIX, defined $type ? $type : SOCK_STREAM, 0, Socket::pack_sockaddr_un $service]);
   }
行中读取
$service!~/^\/#的部分“无法执行”
是阻止它工作的原因

在我的例子中,我刚刚注释掉了那一行,它起了作用,但实际上应该修改正则表达式,允许前面的
\0
表示抽象套接字路径

您有几个选择:

  • 修改库的本地副本
  • 将更改推到Marc Lehmann的上游,希望他接受补丁
  • 猴子补丁的功能
  • 实现您自己的支持抽象域套接字的模块
祝你好运