Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Non-Blocking Bidirectional Communication using Unix Sockets

by dooberwah (Pilgrim)
on Jun 05, 2002 at 19:16 UTC ( [id://171962]=CUFP: print w/replies, xml ) Need Help??

The parent pid sends a string to the child pid, which the child prints out. The child then sleeps for 2 seconds before sending a string to the parent. Instead of locking up completaly the parent prints "Waiting...\n" until there is input for it to read.

I wrote this to encorperate it into a larger Tk script which I don't want freezing when it forks off to download information.

NOTE: This does not work on Windows (hence the name "Unix Sockets")!

The code is a based on of "pipe2" from perlipc. See also: IO::Socket, IO::Select, and perlipc.

#!/usr/bin/perl -w use strict; use Socket; use IO::Socket; use IO::Select; socketpair(CHILD, PARENT, AF_UNIX, SOCK_STREAM, PF_UNSPEC) or die "socketpair: $!"; CHILD->autoflush(1); PARENT->autoflush(1); my $pid; my $s = IO::Select->new(); $s->add(\*CHILD); if ( $pid = fork ) { close PARENT; print CHILD "Parent Pid $$ is sending this\n"; #chomp(my $line = <CHILD>); my $line; while ( 1 ) { if ( $s->can_read(0) ) { foreach my $handle ( $s->can_read(0) ) { recv($handle, $line, 1024, 0); } last; } print "Waiting...\n"; } chomp $line; print "Parent Pid $$ just read this: '$line'\n"; close CHILD; waitpid($pid, 0); } else { die "cannot fork: $!" unless defined $pid; close CHILD; chomp(my $line = <PARENT>); print "Child Pid $$ just read this: '$line'\n"; sleep 2; print PARENT "Child Pid $$ is sending this\n"; close PARENT; exit; }

Replies are listed 'Best First'.
Re: Non-Blocking Bidirectional Communication using Unix Sockets
by Anonymous Monk on Feb 09, 2015 at 20:57 UTC
    You keep using that word "non-blocking."
    I do not think it means what you think it means.

    perldoc -f sysread
    perldoc -f syswrite

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: CUFP [id://171962]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others lurking in the Monastery: (3)
As of 2025-05-22 12:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.