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

Simple bi-directional forking commandline client

by zentara (Archbishop)
on Sep 05, 2008 at 19:39 UTC ( [id://709377]=sourcecode: print w/replies, xml ) Need Help??
Category: Networking Code
Author/Contact Info zentara of perlmonks.
Description: About as simple a forking bi-directional client as you can get. Use with Glib based forking server with root messaging
#!/usr/bin/perl
use warnings;
use strict;
use IO::Socket;

my ( $host, $port, $kidpid, $handle, $line );
( $host, $port ) = ('localhost',2345);

my $name = shift || 'anon';
#if($name eq ''){print "What's your name?\n"}
#chomp ($name = <>);

# create a tcp connection to the specified host and port
$handle = IO::Socket::INET->new(
    Proto    => "tcp",
    PeerAddr => $host,
    PeerPort => $port
  )
  or die "can't connect to port $port on $host: $!";

$handle->autoflush(1);    # so output gets there right away
print STDERR "[Connected to $host:$port]\n";

# split the program into two processes, identical twins
die "can't fork: $!" unless defined( $kidpid = fork() );

# the if{} block runs only in the parent process
if ($kidpid) {

    # copy the socket to standard output
    while ( defined( $line = <$handle> ) ) {
                      print STDOUT $line;
                      }
    print "kill term $kidpid\n";
    kill( "TERM", $kidpid );    # send SIGTERM to child
}

# the else{} block runs only in the child process
else {

    # copy standard input to the socket
    while ( defined( $line = <STDIN> ) ) {
        print $handle "$name->$line";
    }

}

close $handle;
print "socket closed at server\n";
Replies are listed 'Best First'.
Re: Simple bi-directional forking commandline client
by halfcountplus (Hermit) on Sep 06, 2008 at 05:09 UTC
    Not to gush or anything, but zentara does a really nice job with "examplary" code. The man should write a book...

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (3)
As of 2024-03-29 07:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found