首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AnyEvent::Socket和抽象UNIX套接字

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

Stack Overflow用户
提问于 2015-01-11 23:44:54
回答 1查看 266关注 0票数 2

通过套接字,我可以使用:

代码语言:javascript
复制
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:

代码语言:javascript
复制
tcp_connect "unix/",chr(0).'/abstract/socket' , sub {
    my ($fh) = @_
        or die "unable to connect: $!";
    ...
}

和get错误:unable to connect: No such device or address at file.pl line X.

如何在Anyevent::Socket中使用抽象的UNIX套接字?

EN

回答 1

Stack Overflow用户

发布于 2015-04-29 21:37:11

嗨,我深入研究了这个问题,简短的答案是AnyEvent::Socket不支持抽象套接字。

更长的答案是,它确实应该,据我所知,它是一个小疏忽,阻止了它的工作。

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

代码语言:javascript
复制
   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 !~ /^\//; # no can do的部分是阻止它工作的原因。

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

您有几个选项:

  • 修改您的库的本地副本
  • 将更改上游推送给Marc Lehmann,并希望他接受支持抽象域套接字的

模块的补丁

祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27888919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档