Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Contact Us
Online Help
Domain Status
Man Pages

Virtual Servers

Topology Map

Server Agreement
Year 2038

USA Flag



Man Pages

Manual Reference Pages  -  POE::COMPONENT::CLIENT::FTP (3)

.ds Aq ’


POE::Component::Client::FTP - Implements an FTP client POE Component



  use POE::Component::Client::FTP;

  POE::Component::Client::FTP->spawn (
     Alias      => ftp,
     Username   => test,
     Password   => test,
     RemoteAddr => localhost,
     Events     => [ qw( authenticated put_connected put_error put_closed
                       get_connected get_data get_done size ) ]

  # we are authenticated
  sub authenticated {
     $poe_kernel->post(ftp, command, args);

  # data connection is ready for data
  sub put_connected {
     my ($status, $line, $param) = @_[ARG0..ARG3];

     open FILE, "/etc/passwd" or die $!;
     $poe_kernel->post(ftp, put_data, $_) while (<FILE>);
     close FILE;
     $poe_kernel->post(ftp, put_close);

  # something bad happened
  sub put_error {
     my ($error, $param) = @_[ARG0,ARG1];

     warn "ERROR: $error occured while trying to STOR $param";

  # data connection closed
  sub put_closed {
     my ($param) = @_[ARG0];

  # file on the way...
  sub get_connected {
     my ($filename) = @_[ARG0];

  # getting data from the file...
  sub get_data {
     my ($data, $filename) = @_[ARG0,ARG1];


  # and its done
  sub get_done {
     my ($filename) = @_[ARG0];

  # response to a size command
  sub size {
     my ($code, $size, $filename) = @_[ARG0,ARG1,ARG2];

     print "$filename was $size";


Latest version and samples script can be found at: <>


POE::Component::Client::FTP is a POE component that implements an non-blocking FTP client. One spawns an FTP poco from within one’s own POE session, asking to receive particular events.


spawn Creates a new POE::Component::Client::FTP session. Takes a number of named parameters:

  Alias          - session name

  Username       - account username

  Password       - account password

  ConnectionMode - FTP_PASSIVE (default) or FTP_ACTIVE 

  Transfermode   - FTP_MANUAL (default), FTP_ASCII, or FTP_BINARY
                   If set to FTP_ASCII OR FTP_BINARY, will use specified
                   before every file transfer.  If not set, you are
                   responsible to manually post the mode.

  Filters        - a hashref matching signals with POE::Filters
                   If unspecified, reasonable selections will be made.
                   Only filter currently useful is for ls, which parses
                   common ls responses.  See samples/ for example.

  LocalAddr      - interface to listen on in active mode

  LocalPort      - port to listen on in active mode

  RemoteAddr     - ftp server

  RemotePort     - ftp port

  Timeout        - timeout for connection to server

  BlockSize      - sets the recieve buffer size.  see BUGS

  Events         - events you are interested in receiving.  See OUTPUT.

  TLS        - Set to true for TLS supporting servers.

  TLSData            - Set to true for TLS supporting servers of data connections.

TLS support requires the POE::Component::SSLify module to be installed.


These are commands which the poco will accept events for:
cd [path]
delete [filename]
get [filename]
mdtm [filename]
mkdir [dir name]
mode [active passive]
rmdir [dir name]
site [command]
size [filename]
stat [command]
type [A|I]
quot [command]
put_data After receiving a put_connected event you can post put_data events to send data to the server.
put_close Closes the data connection. put_closed will be emit when connection is flushed and closed.


Output for connect consists of connected upon successful connection to server, and connect_error if the connection fails or times out. Upon failure, you can post a connect message to retry the connection.

Output for login is either authenticated if the login was accepted, or login_error if it was rejected.

Output is for simple ftp events is simply event. Error cases are event_error. ARG0 is the numeric code, ARG1 is the text response, and ARG2 is the parameter you made the call with. This is useful since commands such as size do not remind you of this in the server response.

Output for complex or data socket ftp commands is creates event_connection upon socket connection, event_data for each item of data, and event_done when all data is done being sent.

Output from put is put_error for an error creating a connection or put_connected. If you receive put_connected you can post put_data commands to the component to have it write. A put_done command closes and writes. Upon completion, a put_closed or put_error is posted back to you.


the POE manpage, the perl manpage, the Net::FTP module, RFC 959


High level functions High level put and get functions which would accept filenames or filehandles. This may simplify creation of an ftp client or batch script.
Improve local queueing of send data
More sample scripts and documentation Eventually a graphical ftp client might be interesting. Please email me if you decide to attempt this.
More complete test cases
‘‘Meta’’ functions Allow get/put functions to be given filenames or filehandles instead of requiring the calling script to do standard file io in handlers.
Implement TransferMode setting


BlockSize To do the blocksize, I simply rely on the BlockSize parameter in the Wheel::ReadWrite. Although it is honored for receiving data, sending data is done as elements in the array. Possibly change Driver::SysRW or submit to the Wheel in proper sizes. Do not count on receive blocks coming in proper sizes.
TransferMode FTP_ASCII and FTP_BINARY are not implemented. Use the ’type’ command.
Active transfer mode PORT does not know what ip address it is listening on. It gets Use LocalAddr in the constructor and it all works fine.
Please report any other bugs through


Copyright (c) 2002 Michael Ching. Copyright (c) 2008 Chris Williams.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

Search for    or go to Top of page |  Section 3 |  Main Index

perl v5.20.3 POE::COMPONENT::CLIENT::FTP (3) 2009-01-11

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.