【发布时间】:2015-01-22 19:00:11
【问题描述】:
我正在尝试创建一个可以在线程之间共享的套接字对象。以下代码不起作用,因为套接字对象是 GLOB。如何共享套接字对象?这样可以吗?
my $socket1 = IO::Socket::INET->new(
Proto => "tcp",
PeerAddr => "localhost",
PeerPort => "888",
) or die "couldn't connect: $!";
my $socket_shared =shared_clone($socket1);
....
my $thr1 = threads->create(\&Thread_1);
$thr1->join();
sub Thread_1 {
lock($socket_cpy);
my $data = "Msg.\n";
$socket1->send($data);
$socket1->recv($data,1024);
}
错误:不支持的引用类型:GLOB 在第 7 行(此处调用 shared_clone)。
【问题讨论】:
-
你得到什么样的错误?
-
不支持的引用类型:GLOB 在第 XX 行(shared_clone 所在的位置)。
-
文档推荐了两件事;在分配变量之前共享变量,并且仅支持标量、数组和哈希 - 所以将您的套接字存储在 hashref 或数组对象中。
标签: multithreading perl sockets