Thread CLONE_SKIP 'verteufelt' Referenzen auf Objekte - wie vermeiden?
(3 answers)
Opened by Bernd at 2013-01-01 10:59
Der Trick dabei ist den Socket nonblocking zu machen und trotzdem viel zu lesen:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 use IO::Socket::INET; sub make_socket { return IO::Socket::INET->new( PeerAddr => '127.0.0.1', PeerPort => 12345, Proto => 'tcp', Blocking => 0, # <=== das wichtige ); } sub read_if_possible { my $socket=shift; my $buf; my $data=''; while (sysread($server, $buf, 4096)) { $data .= $buf; } return $data; } sysread gibt die Anzahl der gelesenen Bytes zurück. Bei non-blocking Sockets ist differiert das zu den angeforderten Bytes. Zu Therads: Du kannst nur einzelne Variablen zwischen Threads teilen. Wenn du versuchst Strukturen wie Objekte oder Hashreferenzen zu sharen funktioniert das nicht richtig. Willst du also den Socket in mehreren Threads haben, so musst du explizit den Socket sharen und im Objekt auch so behandeln. Damit du das Rad nicht neu erfinden musst schau dir einfach mal an wie es in ![]() Dann gibt es noch Module die das machen: ![]() ![]() ![]() Suche einfach mal auf cpan. |