Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
HOSE(1) 		     General Commands Manual			 HOSE(1)

NAME
     hose - the client end of a BSD network pipe

     netpipes 4.2

SYNOPSIS
     hose   hostname   port  (--in|--out|--err|--fd  n|--slave|--netslave|--net-
     slave1|--netslave2) [--verbose] [--unix]  [--localport  port]  [--localhost
     addr]  [--retry  n]  [--delay  n]	[--shutdown  [r|w][a]  ] [--noreuseaddr]
     [-[i][o][e][#3[,4[,5...]]][s][v][u]] [-p local-port] [-h  local-host]  com-
     mand args

DESCRIPTION
     hose  attempts  to provide the functionality of pipes over the network.  It
     behaves as the client end of a server-client connection.	When  used  with
     faucet(1) it can function as a replacement for

     tar -cf - . | rsh other "cd destdir; tar -xf -"

     faucet and hose are especially useful when you don't have easy non-interac-
     tive access to the destination machine.

OPTIONS
     hose  creates a BSD socket and, if the --localport option is used, binds it
     to the port number (or service name) specified immediately afterwards.   If
     --localhost  is also specified then its argument is a local address to bind
     to. ( --localhost is only useful on machines with multiple IP addresses.)

     hose then tries to connect to the foreign	machine  hostname  with  foreign
     port port.

     If  successful  hose  redirects the socket to stdin, stdout, stderr, and/or
     arbitrary file descriptors according to the --in --out --err --fd n  flags.
     hose  also  automagically	shuts  down the unused half of the connection if
     only --in is specified or if only --out and/or --err  are	specified.   See
     the --shutdown option for more information.

     hose then exec(2)s a command with args.

     However,  the --slave flag turns hose into a primitive sort of telnet.  The
     command is ignored.  Instead, hose goes into a loop where it  copies  bytes
     from stdin to the socket, and bytes from the socket to stdout.  This is ac-
     tually  more useful than telnet because telnet tries to perform interpreta-
     tion on the byte stream and generally gets in your way.  hose  just  passes
     bytes without mucking with them.

     The --netslave* options are variants on the --slave theme.  Whereas --slave
     will continue to forward data in one direction even after the other has en-
     countered	EOF,  --netslave variants are more aggressive in closing the en-
     tire socket.  Before closing the socket, it attempts to flush any data  al-
     ready in its own buffer.  --slave performs the shutdown(2) system call when
     it  encounters  EOF on one direction, but the --netslave variants don't be-
     cause some network daemons are confused by it.

     --netslave closes down the connection when it encounters EOF in either  di-
     rection.

     --netslave1 closes down the connection when it encounters EOF while reading
     stdin.   Any  data  unread on the socket will be ignored.	If it merely en-
     counters EOF on the socket, it will continue to read from stdin.

     --netslave2 closes down the connection when it encounters EOF while reading
     from the socket.  Any data unread on stdin will be ignored.  If  it  merely
     encounters  EOF  on  stdin, it will continue to read from the socket.  This
     mode can be useful with some web servers.

     The --verbose flag specifies that hose should print information  about  the
     host  it  connects to.  This information includes the numeric host address,
     host names, and foreign port numbers.

     The --unix flag specifies that the port is not an internet port  number  or
     service  name, but instead it is a filename for a UNIX domain socket.  This
     option may be simulated by using -unix- as the host name to connect to,  or
     by renaming the hose program to uhose.

     --retry  n allows the user to specify that hose should retry the connect(2)
     call for n times (or forever if n is negative).  --delay  n  specifies  how
     many seconds to delay between tries.

     --shutdown  is  used to control two behaviors.  The first set is controlled
     by the `r' and `w' flags.	If the `r' is present, then hose will close half
     the connection to make it a read-only socket.  If the child tries to write,
     it will fail.  If the remote connection tries to read, it will percieve the
     socket as closed.	If instead the `w' is present, then hose will close  the
     other  half of the connection to make it a write-only socket.  If the child
     tries to read, it will percieve the socket as closed.  If the  remote  con-
     nection  tries  to  write,  it will fail.	The default behavior is to leave
     both halves open, however the shutdown of half of	the  connection  is  au-
     tomagically  done	by  certain  combinations  of the --in, --out, and --err
     flags.  To suppress their automagic behavior  you	can  use  (respectively)
     --fd 0, --fd 1, and --fd 2.

     The  other  behavior  is  controlled  by  the `a' flag.  If the `a' flag is
     present then hose will fork(2) before execcing the  command  and  when  the
     child  exits  it  will  perform a shutdown(2) with how=2.	This closes both
     halves of the connection.	This option is not necessary for  most	applica-
     tions  since  the closing of the file descriptors is detected by the remote
     process, but some less sophisticated network devices (such as printers) re-
     quire a shutdown(2) for proper operation.	To make things perfectly  clear,
     the  list	of  acceptable	arguments to the --shutdown option are `r', `w',
     `ra', `wa', `a'.

     By default, hose performs a

     which prevents the ``Address in use''  problem  that  ``plagued''	netpipes
     versions  4.0  and  earlier.   --noreuseaddr tells hose to skip that system
     call, and revert to pre-4.1 behavior.  Without this call, the port  is  not
     always available for immediate reuse after the hose exits.

SHORT FLAGS
     To  reduce  the typing requirements for arguments (and to pay homage to the
     age-old tradition of UNIX cryptotaxonomy) I have added some short forms  of
     the flags.  Here is a correspondence chart:

     |	     |		    |
     | Short | Long	    |
     |	 i   | in	    |
     |	 o   | out	    |
     |	 e   | err	    |
     |	#n   | fdn	    |
     |	 s   | slave	    |
     |	 v   | verbose	    |
     |	 q   | quiet	    |
     |	 u   | unix	    |
     |	 p   | localport    |
     |	 h   | localhost    |

     See  faucet(1) for a more detailed discussion of short flags.  Their behav-
     ior should be unsurprising.  The flags that require separate arguments fol-
     low in the tradition of tar(1).

EXAMPLES
     This will connect to port 3000 on the machine reef and connect  the  socket
     to the stdin of a tar command.

     example$ hose reef 3000 --in tar -xf - .

     The command actually exec(2)ed by the hose program is

     tar -xf - .

     The  --in	option	means that the input of the child process will have been
     redirected into the socket connected to reef.

     This connects to a UNIX domain socket in the current directory

     example$ hose --unix- u-socket --in sh -c \
	  "unfunky.perl.script | dd of=sample.pgm"

     The socket provides input to the sh command.

SEE ALSO
     netpipes (1), faucet (1), sockdown (1), getpeername (1), socket  (2),  bind
     (2), connect (2), shutdown (2), services (5), gethostbyaddr (3)

NOTES
     Doubtless	there  are  bugs  in this program, especially in the unix domain
     socket portions.  I welcome problem reports and would like  to  make  these
     programs as "clean" (no leftover files, sockets) as possible.

     4.0  made	the full-word arguments use -- like many GNU programs.	They are
     still available with a single - for backward-compatibility.

     3.1 added the single-character flags.

     Release 2.3 added support for multi-homed hosts: hosts with multiple inter-
     net numbers (such as gateways).  Before this faucet assumed that the  first
     internet  number  that gethostbyname returned was the only one.  --foreign-
     port authentication was weakened by this inadequacy so I beefed up the  al-
     gorithms.	 --foreignport will accept a connection from any of the internet
     numbers associated with the host name.

CREDITS
     Thanks to Steve Clift <clift@ml.csiro.au> for SGI (SysV) patches.

     Many people complained about the old way of specifying the command.  Thanks
     to whoever gave me the alternative which is now implemented.   It	is  much
     better.

     Thanks  to  Sten  Drescher  <smd@hrt213.brooks.af.mil>  for the --retry and
     --delay patches and giving me the idea for  the  --shutdown  option.   Evi-
     dently some printer doesn't appreciate the socket being close(2)d.

     Randy Fischer <fischer@ucet.ufl.edu> finally prodded me into fixing the old
     lame non-handling of multi-homed host.

COPYRIGHT
     Copyright (C) 1992-98 Robert Forsman

     This program is free software; you can redistribute it and/or modify it un-
     der  the  terms  of the GNU General Public License as published by the Free
     Software Foundation; either version 2 of the License, or (at  your  option)
     any later version.

     This program is distributed in the hope that it will be useful, but WITHOUT
     ANY  WARRANTY; without even the implied warranty of MERCHANTABILITY or FIT-
     NESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
     details.

     You should have received a copy of the GNU  General  Public  License  along
     with this program; if not, write to the Free Software Foundation, Inc., 675
     Mass Ave, Cambridge, MA 02139, USA.

AUTHOR
     Robert Forsman
      thoth@purplefrog.com
      Purple Frog Software
      http://web.purplefrog.com/~thoth/

				October 28, 1998			 HOSE(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=hose&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help