summaryrefslogtreecommitdiffstats
path: root/upstream/mageia-cauldron/man3pm/Net::FTP.3pm
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
commitfc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch)
treece1e3bce06471410239a6f41282e328770aa404a /upstream/mageia-cauldron/man3pm/Net::FTP.3pm
parentInitial commit. (diff)
downloadmanpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz
manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/mageia-cauldron/man3pm/Net::FTP.3pm')
-rw-r--r--upstream/mageia-cauldron/man3pm/Net::FTP.3pm661
1 files changed, 661 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man3pm/Net::FTP.3pm b/upstream/mageia-cauldron/man3pm/Net::FTP.3pm
new file mode 100644
index 00000000..2150ad3d
--- /dev/null
+++ b/upstream/mageia-cauldron/man3pm/Net::FTP.3pm
@@ -0,0 +1,661 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "Net::FTP 3pm"
+.TH Net::FTP 3pm 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+Net::FTP \- FTP Client class
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 1
+\& use Net::FTP;
+\&
+\& $ftp = Net::FTP\->new("some.host.name", Debug => 0)
+\& or die "Cannot connect to some.host.name: $@";
+\&
+\& $ftp\->login("anonymous",\*(Aq\-anonymous@\*(Aq)
+\& or die "Cannot login ", $ftp\->message;
+\&
+\& $ftp\->cwd("/pub")
+\& or die "Cannot change working directory ", $ftp\->message;
+\&
+\& $ftp\->get("that.file")
+\& or die "get failed ", $ftp\->message;
+\&
+\& $ftp\->quit;
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+\&\f(CW\*(C`Net::FTP\*(C'\fR is a class implementing a simple FTP client in Perl as
+described in RFC959. It provides wrappers for the commonly used subset of the
+RFC959 commands.
+If IO::Socket::IP or IO::Socket::INET6 is installed it also provides
+support for IPv6 as defined in RFC2428.
+And with IO::Socket::SSL installed it provides support for implicit FTPS
+and explicit FTPS as defined in RFC4217.
+.PP
+The Net::FTP class is a subclass of Net::Cmd and (depending on avaibility) of
+IO::Socket::IP, IO::Socket::INET6 or IO::Socket::INET.
+.SS Overview
+.IX Subsection "Overview"
+FTP stands for File Transfer Protocol. It is a way of transferring
+files between networked machines. The protocol defines a client
+(whose commands are provided by this module) and a server (not
+implemented in this module). Communication is always initiated by the
+client, and the server responds with a message and a status code (and
+sometimes with data).
+.PP
+The FTP protocol allows files to be sent to or fetched from the
+server. Each transfer involves a \fBlocal file\fR (on the client) and a
+\&\fBremote file\fR (on the server). In this module, the same file name
+will be used for both local and remote if only one is specified. This
+means that transferring remote file \f(CW\*(C`/path/to/file\*(C'\fR will try to put
+that file in \f(CW\*(C`/path/to/file\*(C'\fR locally, unless you specify a local file
+name.
+.PP
+The protocol also defines several standard \fBtranslations\fR which the
+file can undergo during transfer. These are ASCII, EBCDIC, binary,
+and byte. ASCII is the default type, and indicates that the sender of
+files will translate the ends of lines to a standard representation
+which the receiver will then translate back into their local
+representation. EBCDIC indicates the file being transferred is in
+EBCDIC format. Binary (also known as image) format sends the data as
+a contiguous bit stream. Byte format transfers the data as bytes, the
+values of which remain the same regardless of differences in byte size
+between the two machines (in theory \- in practice you should only use
+this if you really know what you're doing). This class does not support
+the EBCDIC or byte formats, and will default to binary instead if they
+are attempted.
+.SS "Class Methods"
+.IX Subsection "Class Methods"
+.ie n .IP """new([$host][, %options])""" 4
+.el .IP "\f(CWnew([$host][, %options])\fR" 4
+.IX Item "new([$host][, %options])"
+This is the constructor for a new Net::FTP object. \f(CW$host\fR is the
+name of the remote host to which an FTP connection is required.
+.Sp
+\&\f(CW$host\fR is optional. If \f(CW$host\fR is not given then it may instead be
+passed as the \f(CW\*(C`Host\*(C'\fR option described below.
+.Sp
+\&\f(CW%options\fR are passed in a hash like fashion, using key and value pairs.
+Possible options are:
+.Sp
+\&\fBHost\fR \- FTP host to connect to. It may be a single scalar, as defined for
+the \f(CW\*(C`PeerAddr\*(C'\fR option in IO::Socket::INET, or a reference to
+an array with hosts to try in turn. The "host" method will return the value
+which was used to connect to the host.
+.Sp
+\&\fBFirewall\fR \- The name of a machine which acts as an FTP firewall. This can be
+overridden by an environment variable \f(CW\*(C`FTP_FIREWALL\*(C'\fR. If specified, and the
+given host cannot be directly connected to, then the
+connection is made to the firewall machine and the string \f(CW@hostname\fR is
+appended to the login identifier. This kind of setup is also referred to
+as an ftp proxy.
+.Sp
+\&\fBFirewallType\fR \- The type of firewall running on the machine indicated by
+\&\fBFirewall\fR. This can be overridden by an environment variable
+\&\f(CW\*(C`FTP_FIREWALL_TYPE\*(C'\fR. For a list of permissible types, see the description of
+ftp_firewall_type in Net::Config.
+.Sp
+\&\fBBlockSize\fR \- This is the block size that Net::FTP will use when doing
+transfers. (defaults to 10240)
+.Sp
+\&\fBPort\fR \- The port number to connect to on the remote machine for the
+FTP connection
+.Sp
+\&\fBSSL\fR \- If the connection should be done from start with SSL, contrary to later
+upgrade with \f(CW\*(C`starttls\*(C'\fR.
+.Sp
+\&\fBSSL_*\fR \- SSL arguments which will be applied when upgrading the control or
+data connection to SSL. You can use SSL arguments as documented in
+IO::Socket::SSL, but it will usually use the right arguments already.
+.Sp
+\&\fBTimeout\fR \- Set a timeout value in seconds (defaults to 120)
+.Sp
+\&\fBDebug\fR \- debug level (see the debug method in Net::Cmd)
+.Sp
+\&\fBPassive\fR \- If set to a non-zero value then all data transfers will
+be done using passive mode. If set to zero then data transfers will be
+done using active mode. If the machine is connected to the Internet
+directly, both passive and active mode should work equally well.
+Behind most firewall and NAT configurations passive mode has a better
+chance of working. However, in some rare firewall configurations,
+active mode actually works when passive mode doesn't. Some really old
+FTP servers might not implement passive transfers. If not specified,
+then the transfer mode is set by the environment variable
+\&\f(CW\*(C`FTP_PASSIVE\*(C'\fR or if that one is not set by the settings done by the
+\&\fIlibnetcfg\fR utility. If none of these apply then passive mode is
+used.
+.Sp
+\&\fBHash\fR \- If given a reference to a file handle (e.g., \f(CW\*(C`\e*STDERR\*(C'\fR),
+print hash marks (#) on that filehandle every 1024 bytes. This
+simply invokes the \f(CWhash()\fR method for you, so that hash marks
+are displayed for all transfers. You can, of course, call \f(CWhash()\fR
+explicitly whenever you'd like.
+.Sp
+\&\fBLocalAddr\fR \- Local address to use for all socket connections. This
+argument will be passed to the super class, i.e. IO::Socket::INET
+or IO::Socket::IP.
+.Sp
+\&\fBDomain\fR \- Domain to use, i.e. AF_INET or AF_INET6. This
+argument will be passed to the IO::Socket super class.
+This can be used to enforce IPv4 even with IO::Socket::IP
+which would default to IPv6.
+\&\fBFamily\fR is accepted as alternative name for \fBDomain\fR.
+.Sp
+If the constructor fails undef will be returned and an error message will
+be in $@
+.SS "Object Methods"
+.IX Subsection "Object Methods"
+Unless otherwise stated all methods return either a \fItrue\fR or \fIfalse\fR
+value, with \fItrue\fR meaning that the operation was a success. When a method
+states that it returns a value, failure will be returned as \fIundef\fR or an
+empty list.
+.PP
+\&\f(CW\*(C`Net::FTP\*(C'\fR inherits from \f(CW\*(C`Net::Cmd\*(C'\fR so methods defined in \f(CW\*(C`Net::Cmd\*(C'\fR may
+be used to send commands to the remote FTP server in addition to the methods
+documented here.
+.ie n .IP """login([$login[, $password[, $account]]])""" 4
+.el .IP "\f(CWlogin([$login[, $password[, $account]]])\fR" 4
+.IX Item "login([$login[, $password[, $account]]])"
+Log into the remote FTP server with the given login information. If
+no arguments are given then the \f(CW\*(C`Net::FTP\*(C'\fR uses the \f(CW\*(C`Net::Netrc\*(C'\fR
+package to lookup the login information for the connected host.
+If no information is found then a login of \fIanonymous\fR is used.
+If no password is given and the login is \fIanonymous\fR then \fIanonymous@\fR
+will be used for password.
+.Sp
+If the connection is via a firewall then the \f(CW\*(C`authorize\*(C'\fR method will
+be called with no arguments.
+.ie n .IP starttls() 4
+.el .IP \f(CWstarttls()\fR 4
+.IX Item "starttls()"
+Upgrade existing plain connection to SSL.
+The SSL arguments have to be given in \f(CW\*(C`new\*(C'\fR already because they are needed for
+data connections too.
+.ie n .IP stoptls() 4
+.el .IP \f(CWstoptls()\fR 4
+.IX Item "stoptls()"
+Downgrade existing SSL connection back to plain.
+This is needed to work with some FTP helpers at firewalls, which need to see the
+PORT and PASV commands and responses to dynamically open the necessary ports.
+In this case \f(CW\*(C`starttls\*(C'\fR is usually only done to protect the authorization.
+.ie n .IP prot($level) 4
+.el .IP \f(CWprot($level)\fR 4
+.IX Item "prot($level)"
+Set what type of data channel protection the client and server will be using.
+Only \f(CW$level\fRs "C" (clear) and "P" (private) are supported.
+.ie n .IP host() 4
+.el .IP \f(CWhost()\fR 4
+.IX Item "host()"
+Returns the value used by the constructor, and passed to the IO::Socket super
+class to connect to the host.
+.ie n .IP account($acct) 4
+.el .IP \f(CWaccount($acct)\fR 4
+.IX Item "account($acct)"
+Set a string identifying the user's account.
+.ie n .IP """authorize([$auth[, $resp]])""" 4
+.el .IP "\f(CWauthorize([$auth[, $resp]])\fR" 4
+.IX Item "authorize([$auth[, $resp]])"
+This is a protocol used by some firewall ftp proxies. It is used
+to authorise the user to send data out. If both arguments are not specified
+then \f(CW\*(C`authorize\*(C'\fR uses \f(CW\*(C`Net::Netrc\*(C'\fR to do a lookup.
+.ie n .IP site($args) 4
+.el .IP \f(CWsite($args)\fR 4
+.IX Item "site($args)"
+Send a SITE command to the remote server and wait for a response.
+.Sp
+Returns most significant digit of the response code.
+.ie n .IP ascii() 4
+.el .IP \f(CWascii()\fR 4
+.IX Item "ascii()"
+Transfer file in ASCII. CRLF translation will be done if required
+.ie n .IP binary() 4
+.el .IP \f(CWbinary()\fR 4
+.IX Item "binary()"
+Transfer file in binary mode. No transformation will be done.
+.Sp
+\&\fBHint\fR: If both server and client machines use the same line ending for
+text files, then it will be faster to transfer all files in binary mode.
+.ie n .IP type([$type]) 4
+.el .IP \f(CWtype([$type])\fR 4
+.IX Item "type([$type])"
+Set or get if files will be transferred in ASCII or binary mode.
+.ie n .IP """rename($oldname, $newname)""" 4
+.el .IP "\f(CWrename($oldname, $newname)\fR" 4
+.IX Item "rename($oldname, $newname)"
+Rename a file on the remote FTP server from \f(CW$oldname\fR to \f(CW$newname\fR. This
+is done by sending the RNFR and RNTO commands.
+.ie n .IP delete($filename) 4
+.el .IP \f(CWdelete($filename)\fR 4
+.IX Item "delete($filename)"
+Send a request to the server to delete \f(CW$filename\fR.
+.ie n .IP cwd([$dir]) 4
+.el .IP \f(CWcwd([$dir])\fR 4
+.IX Item "cwd([$dir])"
+Attempt to change directory to the directory given in \f(CW$dir\fR. If
+\&\f(CW$dir\fR is \f(CW".."\fR, the FTP \f(CW\*(C`CDUP\*(C'\fR command is used to attempt to
+move up one directory. If no directory is given then an attempt is made
+to change the directory to the root directory.
+.ie n .IP cdup() 4
+.el .IP \f(CWcdup()\fR 4
+.IX Item "cdup()"
+Change directory to the parent of the current directory.
+.ie n .IP passive([$passive]) 4
+.el .IP \f(CWpassive([$passive])\fR 4
+.IX Item "passive([$passive])"
+Set or get if data connections will be initiated in passive mode.
+.ie n .IP pwd() 4
+.el .IP \f(CWpwd()\fR 4
+.IX Item "pwd()"
+Returns the full pathname of the current directory.
+.ie n .IP restart($where) 4
+.el .IP \f(CWrestart($where)\fR 4
+.IX Item "restart($where)"
+Set the byte offset at which to begin the next data transfer. Net::FTP simply
+records this value and uses it when during the next data transfer. For this
+reason this method will not return an error, but setting it may cause
+a subsequent data transfer to fail.
+.ie n .IP """rmdir($dir[, $recurse])""" 4
+.el .IP "\f(CWrmdir($dir[, $recurse])\fR" 4
+.IX Item "rmdir($dir[, $recurse])"
+Remove the directory with the name \f(CW$dir\fR. If \f(CW$recurse\fR is \fItrue\fR then
+\&\f(CW\*(C`rmdir\*(C'\fR will attempt to delete everything inside the directory.
+.ie n .IP """mkdir($dir[, $recurse])""" 4
+.el .IP "\f(CWmkdir($dir[, $recurse])\fR" 4
+.IX Item "mkdir($dir[, $recurse])"
+Create a new directory with the name \f(CW$dir\fR. If \f(CW$recurse\fR is \fItrue\fR then
+\&\f(CW\*(C`mkdir\*(C'\fR will attempt to create all the directories in the given path.
+.Sp
+Returns the full pathname to the new directory.
+.ie n .IP """alloc($size[, $record_size])""" 4
+.el .IP "\f(CWalloc($size[, $record_size])\fR" 4
+.IX Item "alloc($size[, $record_size])"
+The alloc command allows you to give the ftp server a hint about the size
+of the file about to be transferred using the ALLO ftp command. Some storage
+systems use this to make intelligent decisions about how to store the file.
+The \f(CW$size\fR argument represents the size of the file in bytes. The
+\&\f(CW$record_size\fR argument indicates a maximum record or page size for files
+sent with a record or page structure.
+.Sp
+The size of the file will be determined, and sent to the server
+automatically for normal files so that this method need only be called if
+you are transferring data from a socket, named pipe, or other stream not
+associated with a normal file.
+.ie n .IP ls([$dir]) 4
+.el .IP \f(CWls([$dir])\fR 4
+.IX Item "ls([$dir])"
+Get a directory listing of \f(CW$dir\fR, or the current directory.
+.Sp
+In an array context, returns a list of lines returned from the server. In
+a scalar context, returns a reference to a list.
+.ie n .IP dir([$dir]) 4
+.el .IP \f(CWdir([$dir])\fR 4
+.IX Item "dir([$dir])"
+Get a directory listing of \f(CW$dir\fR, or the current directory in long format.
+.Sp
+In an array context, returns a list of lines returned from the server. In
+a scalar context, returns a reference to a list.
+.ie n .IP """get($remote_file[, $local_file[, $where]])""" 4
+.el .IP "\f(CWget($remote_file[, $local_file[, $where]])\fR" 4
+.IX Item "get($remote_file[, $local_file[, $where]])"
+Get \f(CW$remote_file\fR from the server and store locally. \f(CW$local_file\fR may be
+a filename or a filehandle. If not specified, the file will be stored in
+the current directory with the same leafname as the remote file.
+.Sp
+If \f(CW$where\fR is given then the first \f(CW$where\fR bytes of the file will
+not be transferred, and the remaining bytes will be appended to
+the local file if it already exists.
+.Sp
+Returns \f(CW$local_file\fR, or the generated local file name if \f(CW$local_file\fR
+is not given. If an error was encountered undef is returned.
+.ie n .IP """put($local_file[, $remote_file])""" 4
+.el .IP "\f(CWput($local_file[, $remote_file])\fR" 4
+.IX Item "put($local_file[, $remote_file])"
+Put a file on the remote server. \f(CW$local_file\fR may be a name or a filehandle.
+If \f(CW$local_file\fR is a filehandle then \f(CW$remote_file\fR must be specified. If
+\&\f(CW$remote_file\fR is not specified then the file will be stored in the current
+directory with the same leafname as \f(CW$local_file\fR.
+.Sp
+Returns \f(CW$remote_file\fR, or the generated remote filename if \f(CW$remote_file\fR
+is not given.
+.Sp
+\&\fBNOTE\fR: If for some reason the transfer does not complete and an error is
+returned then the contents that had been transferred will not be remove
+automatically.
+.ie n .IP """put_unique($local_file[, $remote_file])""" 4
+.el .IP "\f(CWput_unique($local_file[, $remote_file])\fR" 4
+.IX Item "put_unique($local_file[, $remote_file])"
+Same as put but uses the \f(CW\*(C`STOU\*(C'\fR command.
+.Sp
+Returns the name of the file on the server.
+.ie n .IP """append($local_file[, $remote_file])""" 4
+.el .IP "\f(CWappend($local_file[, $remote_file])\fR" 4
+.IX Item "append($local_file[, $remote_file])"
+Same as put but appends to the file on the remote server.
+.Sp
+Returns \f(CW$remote_file\fR, or the generated remote filename if \f(CW$remote_file\fR
+is not given.
+.ie n .IP unique_name() 4
+.el .IP \f(CWunique_name()\fR 4
+.IX Item "unique_name()"
+Returns the name of the last file stored on the server using the
+\&\f(CW\*(C`STOU\*(C'\fR command.
+.ie n .IP mdtm($file) 4
+.el .IP \f(CWmdtm($file)\fR 4
+.IX Item "mdtm($file)"
+Returns the \fImodification time\fR of the given file
+.ie n .IP size($file) 4
+.el .IP \f(CWsize($file)\fR 4
+.IX Item "size($file)"
+Returns the size in bytes for the given file as stored on the remote server.
+.Sp
+\&\fBNOTE\fR: The size reported is the size of the stored file on the remote server.
+If the file is subsequently transferred from the server in ASCII mode
+and the remote server and local machine have different ideas about
+"End Of Line" then the size of file on the local machine after transfer
+may be different.
+.ie n .IP supported($cmd) 4
+.el .IP \f(CWsupported($cmd)\fR 4
+.IX Item "supported($cmd)"
+Returns TRUE if the remote server supports the given command.
+.ie n .IP """hash([$filehandle_glob_ref[, $bytes_per_hash_mark]])""" 4
+.el .IP "\f(CWhash([$filehandle_glob_ref[, $bytes_per_hash_mark]])\fR" 4
+.IX Item "hash([$filehandle_glob_ref[, $bytes_per_hash_mark]])"
+Called without parameters, or with the first argument false, hash marks
+are suppressed. If the first argument is true but not a reference to a
+file handle glob, then \e*STDERR is used. The second argument is the number
+of bytes per hash mark printed, and defaults to 1024. In all cases the
+return value is a reference to an array of two: the filehandle glob reference
+and the bytes per hash mark.
+.ie n .IP feature($name) 4
+.el .IP \f(CWfeature($name)\fR 4
+.IX Item "feature($name)"
+Determine if the server supports the specified feature. The return
+value is a list of lines the server responded with to describe the
+options that it supports for the given feature. If the feature is
+unsupported then the empty list is returned.
+.Sp
+.Vb 3
+\& if ($ftp\->feature( \*(AqMDTM\*(Aq )) {
+\& # Do something
+\& }
+\&
+\& if (grep { /\ebTLS\eb/ } $ftp\->feature(\*(AqAUTH\*(Aq)) {
+\& # Server supports TLS
+\& }
+.Ve
+.PP
+The following methods can return different results depending on
+how they are called. If the user explicitly calls either
+of the \f(CW\*(C`pasv\*(C'\fR or \f(CW\*(C`port\*(C'\fR methods then these methods will
+return a \fItrue\fR or \fIfalse\fR value. If the user does not
+call either of these methods then the result will be a
+reference to a \f(CW\*(C`Net::FTP::dataconn\*(C'\fR based object.
+.ie n .IP nlst([$dir]) 4
+.el .IP \f(CWnlst([$dir])\fR 4
+.IX Item "nlst([$dir])"
+Send an \f(CW\*(C`NLST\*(C'\fR command to the server, with an optional parameter.
+.ie n .IP list([$dir]) 4
+.el .IP \f(CWlist([$dir])\fR 4
+.IX Item "list([$dir])"
+Same as \f(CW\*(C`nlst\*(C'\fR but using the \f(CW\*(C`LIST\*(C'\fR command
+.ie n .IP retr($file) 4
+.el .IP \f(CWretr($file)\fR 4
+.IX Item "retr($file)"
+Begin the retrieval of a file called \f(CW$file\fR from the remote server.
+.ie n .IP stor($file) 4
+.el .IP \f(CWstor($file)\fR 4
+.IX Item "stor($file)"
+Tell the server that you wish to store a file. \f(CW$file\fR is the
+name of the new file that should be created.
+.ie n .IP stou($file) 4
+.el .IP \f(CWstou($file)\fR 4
+.IX Item "stou($file)"
+Same as \f(CW\*(C`stor\*(C'\fR but using the \f(CW\*(C`STOU\*(C'\fR command. The name of the unique
+file which was created on the server will be available via the \f(CW\*(C`unique_name\*(C'\fR
+method after the data connection has been closed.
+.ie n .IP appe($file) 4
+.el .IP \f(CWappe($file)\fR 4
+.IX Item "appe($file)"
+Tell the server that we want to append some data to the end of a file
+called \f(CW$file\fR. If this file does not exist then create it.
+.PP
+If for some reason you want to have complete control over the data connection,
+this includes generating it and calling the \f(CW\*(C`response\*(C'\fR method when required,
+then the user can use these methods to do so.
+.PP
+However calling these methods only affects the use of the methods above that
+can return a data connection. They have no effect on methods \f(CW\*(C`get\*(C'\fR, \f(CW\*(C`put\*(C'\fR,
+\&\f(CW\*(C`put_unique\*(C'\fR and those that do not require data connections.
+.ie n .IP port([$port]) 4
+.el .IP \f(CWport([$port])\fR 4
+.IX Item "port([$port])"
+.PD 0
+.ie n .IP eprt([$port]) 4
+.el .IP \f(CWeprt([$port])\fR 4
+.IX Item "eprt([$port])"
+.PD
+Send a \f(CW\*(C`PORT\*(C'\fR (IPv4) or \f(CW\*(C`EPRT\*(C'\fR (IPv6) command to the server. If \f(CW$port\fR is
+specified then it is sent to the server. If not, then a listen socket is created
+and the correct information sent to the server.
+.ie n .IP pasv() 4
+.el .IP \f(CWpasv()\fR 4
+.IX Item "pasv()"
+.PD 0
+.ie n .IP epsv() 4
+.el .IP \f(CWepsv()\fR 4
+.IX Item "epsv()"
+.PD
+Tell the server to go into passive mode (\f(CW\*(C`pasv\*(C'\fR for IPv4, \f(CW\*(C`epsv\*(C'\fR for IPv6).
+Returns the text that represents the port on which the server is listening, this
+text is in a suitable form to send to another ftp server using the \f(CW\*(C`port\*(C'\fR or
+\&\f(CW\*(C`eprt\*(C'\fR method.
+.PP
+The following methods can be used to transfer files between two remote
+servers, providing that these two servers can connect directly to each other.
+.ie n .IP """pasv_xfer($src_file, $dest_server[, $dest_file ])""" 4
+.el .IP "\f(CWpasv_xfer($src_file, $dest_server[, $dest_file ])\fR" 4
+.IX Item "pasv_xfer($src_file, $dest_server[, $dest_file ])"
+This method will do a file transfer between two remote ftp servers. If
+\&\f(CW$dest_file\fR is omitted then the leaf name of \f(CW$src_file\fR will be used.
+.ie n .IP """pasv_xfer_unique($src_file, $dest_server[, $dest_file ])""" 4
+.el .IP "\f(CWpasv_xfer_unique($src_file, $dest_server[, $dest_file ])\fR" 4
+.IX Item "pasv_xfer_unique($src_file, $dest_server[, $dest_file ])"
+Like \f(CW\*(C`pasv_xfer\*(C'\fR but the file is stored on the remote server using
+the STOU command.
+.ie n .IP pasv_wait($non_pasv_server) 4
+.el .IP \f(CWpasv_wait($non_pasv_server)\fR 4
+.IX Item "pasv_wait($non_pasv_server)"
+This method can be used to wait for a transfer to complete between a passive
+server and a non-passive server. The method should be called on the passive
+server with the \f(CW\*(C`Net::FTP\*(C'\fR object for the non-passive server passed as an
+argument.
+.ie n .IP abort() 4
+.el .IP \f(CWabort()\fR 4
+.IX Item "abort()"
+Abort the current data transfer.
+.ie n .IP quit() 4
+.el .IP \f(CWquit()\fR 4
+.IX Item "quit()"
+Send the QUIT command to the remote FTP server and close the socket connection.
+.SS "Methods for the Adventurous"
+.IX Subsection "Methods for the Adventurous"
+.ie n .IP """quot($cmd[, $args])""" 4
+.el .IP "\f(CWquot($cmd[, $args])\fR" 4
+.IX Item "quot($cmd[, $args])"
+Send a command, that Net::FTP does not directly support, to the remote
+server and wait for a response.
+.Sp
+Returns most significant digit of the response code.
+.Sp
+\&\fBWARNING\fR This call should only be used on commands that do not require
+data connections. Misuse of this method can hang the connection.
+.ie n .IP can_inet6() 4
+.el .IP \f(CWcan_inet6()\fR 4
+.IX Item "can_inet6()"
+Returns whether we can use IPv6.
+.ie n .IP can_ssl() 4
+.el .IP \f(CWcan_ssl()\fR 4
+.IX Item "can_ssl()"
+Returns whether we can use SSL.
+.SS "The dataconn Class"
+.IX Subsection "The dataconn Class"
+Some of the methods defined in \f(CW\*(C`Net::FTP\*(C'\fR return an object which will
+be derived from the \f(CW\*(C`Net::FTP::dataconn\*(C'\fR class. See Net::FTP::dataconn for
+more details.
+.SS Unimplemented
+.IX Subsection "Unimplemented"
+The following RFC959 commands have not been implemented:
+.ie n .IP """SMNT""" 4
+.el .IP \f(CWSMNT\fR 4
+.IX Item "SMNT"
+Mount a different file system structure without changing login or
+accounting information.
+.ie n .IP """HELP""" 4
+.el .IP \f(CWHELP\fR 4
+.IX Item "HELP"
+Ask the server for "helpful information" (that's what the RFC says) on
+the commands it accepts.
+.ie n .IP """MODE""" 4
+.el .IP \f(CWMODE\fR 4
+.IX Item "MODE"
+Specifies transfer mode (stream, block or compressed) for file to be
+transferred.
+.ie n .IP """SYST""" 4
+.el .IP \f(CWSYST\fR 4
+.IX Item "SYST"
+Request remote server system identification.
+.ie n .IP """STAT""" 4
+.el .IP \f(CWSTAT\fR 4
+.IX Item "STAT"
+Request remote server status.
+.ie n .IP """STRU""" 4
+.el .IP \f(CWSTRU\fR 4
+.IX Item "STRU"
+Specifies file structure for file to be transferred.
+.ie n .IP """REIN""" 4
+.el .IP \f(CWREIN\fR 4
+.IX Item "REIN"
+Reinitialize the connection, flushing all I/O and account information.
+.SH EXPORTS
+.IX Header "EXPORTS"
+\&\fINone\fR.
+.SH "KNOWN BUGS"
+.IX Header "KNOWN BUGS"
+See <https://rt.cpan.org/Dist/Display.html?Status=Active&Queue=libnet>.
+.SS "Reporting Bugs"
+.IX Subsection "Reporting Bugs"
+When reporting bugs/problems please include as much information as possible.
+It may be difficult for me to reproduce the problem as almost every setup
+is different.
+.PP
+A small script which yields the problem will probably be of help. It would
+also be useful if this script was run with the extra options \f(CW\*(C`Debug => 1\*(C'\fR
+passed to the constructor, and the output sent with the bug report. If you
+cannot include a small script then please include a Debug trace from a
+run of your program which does yield the problem.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+Net::Netrc,
+Net::Cmd,
+IO::Socket::SSL;
+.PP
+\&\fBftp\fR\|(1),
+\&\fBftpd\fR\|(8);
+.PP
+<https://www.ietf.org/rfc/rfc959.txt>,
+<https://www.ietf.org/rfc/rfc2428.txt>,
+<https://www.ietf.org/rfc/rfc4217.txt>.
+.SH ACKNOWLEDGEMENTS
+.IX Header "ACKNOWLEDGEMENTS"
+Henry Gabryjelski <henryg@WPI.EDU <mailto:henryg@WPI.EDU>> \- for the
+suggestion of creating directories recursively.
+.PP
+Nathan Torkington <gnat@frii.com <mailto:gnat@frii.com>> \- for some
+input on the documentation.
+.PP
+Roderick Schertler <roderick@gate.net <mailto:roderick@gate.net>> \- for
+various inputs
+.SH AUTHOR
+.IX Header "AUTHOR"
+Graham Barr <gbarr@pobox.com <mailto:gbarr@pobox.com>>.
+.PP
+Steve Hay <shay@cpan.org <mailto:shay@cpan.org>> is now maintaining
+libnet as of version 1.22_02.
+.SH COPYRIGHT
+.IX Header "COPYRIGHT"
+Copyright (C) 1995\-2004 Graham Barr. All rights reserved.
+.PP
+Copyright (C) 2013\-2017, 2020, 2022 Steve Hay. All rights reserved.
+.SH LICENCE
+.IX Header "LICENCE"
+This module is free software; you can redistribute it and/or modify it under the
+same terms as Perl itself, i.e. under the terms of either the GNU General Public
+License or the Artistic License, as specified in the \fILICENCE\fR file.
+.SH VERSION
+.IX Header "VERSION"
+Version 3.15
+.SH DATE
+.IX Header "DATE"
+20 March 2023
+.SH HISTORY
+.IX Header "HISTORY"
+See the \fIChanges\fR file.