perl - 如何创建 Unix 域套接字?

标签 perl sockets

我正在尝试学习如何使用套接字在同一台计算机上的进程之间进行通信。我从 Perl Cookbook 中的这个简单测试程序开始:

use feature qw(say);
use strict;
use warnings;
use IO::Socket;

my $socket_file = 'mysocket';
if ( -e $socket_file ) {
    unlink $socket_file or die "Could not delete socket file '$socket_file': $!";
}
my $sock = IO::Socket::UNIX->new(
    LocalAddr => $socket_file,
    Type      => SOCK_STREAM,
    Listen    => 5, # listen to max 5 connections
) or die "Could not create socket: '$@'";

say "Created socket successfully..";
sleep 1;
close $sock;
say "Closed socket..";

exit;

输出为:

Could not create socket: '' at ./test.pl line 10.

所以问题是:为什么IO::Socket::UNIX->new()失败,为什么失败时不设置$@

最佳答案

它没有设置$@,因为IO::Socket::UNIX在任何地方都不使用eval。 如果您打印 $! 而不是 $@,您可能会看到:

Invalid argument at xxx.pl line 10.

此时您可以查阅 IO::Socket::UNIX docs并查看要传递的正确参数是 Local 而不是 LocalAddr

关于perl - 如何创建 Unix 域套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39379254/

相关文章:

sockets - 在环回设备上打开的 packetsocket 接收所有数据包两次。如何过滤这些重复的条目?

java - 在java中从客户端发送到服务器以及从服务器发送到客户端

php - 如何使用多维数组中的值对多维数组进行排序?

perl - 如何编写 Perl 脚本来提取 Perl 包中每个子程序的源代码?

perl - 在 perl 中,如何从 STDIN 读取直到我们找到一个空格或换行符?

perl - Mac 上的 GIT-SVN 问题

python - 在 Python 和 Perl 套接字之间交换数据

c++ - 使用 Berkeley 套接字进行多路复用

ruby - 为什么使用Parallel gem运行 “knife solo cook”会给出端口错误?

c# - 为什么我在本地声明的变量在 finally block 中没有被识别?