NAME
IO::Mux - Multiplex several virtual streams over a real pipe/socket
SYNOPSIS
use IO::Mux ;
pipe(R, W) ;
if (fork){
my $mux = new IO::Mux(\*W) ;
my $alice = $mux->new_handle() ;
open($alice, 'alice') ;
my $bob = $mux->new_handle() ;
open($bob, 'bob') ;
print $alice "Hi Alice!\n" ;
print $bob "Hi Bob!\n" ;
}
else {
my $mux = new IO::Mux(\*R) ;
my $alice = $mux->new_handle() ;
open($alice, 'alice') ;
my $bob = $mux->new_handle() ;
open($bob, 'bob') ;
print scalar(<$bob>) ;
print scalar(<$alice>) ;
}
DESCRIPTION
IO::Mux
allows you to multiplex several virtual streams over a single pipe or socket. This is achieved by creating an IO::Mux
object on each end of the real stream and then creating virtual handles (IO::Mux::Handle
objects) from these IO::Mux
objects.
Each IO::Mux::Handle
object is assigned a unique identifier when opened, and IO::Mux::Handle
objects on each end of the real stream that have the same identifier are "mapped" to each other.
CONSTRUCTOR
- new ( HANDLE )
-
Creates a new
IO::Mux
object that multiplexes over HANDLE.autoflush
will be turned on for HANDLE.
METHODS
- $mux->get_handle ()
-
Returns the handle passed when $mux was created.
- $mux->new_handle ()
-
Convenience method. Returns a new IO::Mux::Handle object created on $mux. Is equivalent to:
new IO::Mux::Handle($mux) ;
The handle must then be opened before being used. See IO::Mux::Handle for more details.
NOTE
Once a handle has been passed to an IO::Mux
object, it is important that it is not written to/read from directly as this will corrupt the IO::Mux
stream. Once the IO::Mux
objects on both ends of the stream are out of scope (and have no data pending), normal usage of the handleis can resume.
SEE ALSO
AUTHOR
Patrick LeBoutillier, <patl@cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2005 by Patrick LeBoutillier
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.5 or, at your option, any later version of Perl 5 you may have available.