| 
<?phprequire 'MIO/Selector.php';
 require 'MIO/SelectionKey.php';
 require 'MIO/Stream.php';
 require 'MIO/StreamFactory.php';
 require 'MIO/Exception.php';
 
 $urls = array(
 'http://uk.php.net/get/php-5.2.1.tar.bz2/from/this/mirror'  => 'php.tar.bz2',
 'http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.15-beta-linux-i686-glibc23.tar.gz/from/http://mirrors.dedipower.com/www.mysql.com/' => 'mysql.tar.gz',
 'http://www.mirrorservice.org/sites/ftp.apache.org/httpd/httpd-2.2.4.tar.bz2' => 'apache.tar.bz2'
 );
 
 $selector = new MioSelector();
 $streams  = new MioStreamFactory();
 
 foreach( $urls as $url => $file ) {
 // I suppose I should really have a buffer in between them
 // but I think I can be pretty sure the network is going to
 // be slower than the filesystem.
 $selector->register(
 $streams->createFileStream( $url, 'r' ),
 MioSelectionKey::OP_READ,
 $streams->createFileStream( $file, 'w+' )
 );
 }
 
 echo "\n";
 for( $i=1; ; $i++ ) {
 while( !$count = $selector->select( 100000 ) ) {
 if( $count === false ) {
 $selector->close();
 break 2;
 }
 }
 
 foreach( $selector->selected_keys as $key ) {
 if( $key->isReadable() ) {
 $key->attachment->write(
 $key->stream->read( 16384 )
 );
 } else {
 echo "Que!\n";
 }
 }
 echo "\r";
 foreach( $urls as $file ) {
 echo $file . ' (' . filesize( $file ) . ') ';
 }
 }
 echo "\n";
 
 |