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

FreeBSD Manual Pages

  
 
  

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

NAME
       sockdown	- shutdown(2) a	socket

       netpipes	4.2

SYNOPSIS
       sockdown	[ fd [how] ]

DESCRIPTION
       sockdown	 performs  the	shutdown(2) system call	on one of its file de-
       scriptors specified by fd.  The possible	values for how are

       |	   |								  |
       | writeonly | convert to	write-only file	descriptor			  |
       | 0	   | convert to	write-only file	descriptor			  |
       | writeonly | symbolic for same as above					  |
       | 1	   | convert to	read-only file descriptor			  |
       | readonly  | symbolic for same as above					  |
       | 2	   | complete shutdown.	 no reads or writes allowed in the future |
       | totally   | symbolic for same as above					  |

       The default fd is 1 (stdout) and	the default how	is 1.

EXAMPLES
       Imagine you have	a machine that can perform a  service  (in  this  case
       conversion from ASCII to	fancy postscript) :

       server$ faucet 3000 --in	--out enscript -2rGhp -

       You may then connect to it with a hose.	However, the first example en-
       ters deadlock :

       client$ hose server 3000	-in -out \
	    sh -c " cat	blah.txt & cat > blah.ps "

       The  enscript  blocks waiting for input from the	socket because not all
       of the client processes have exited.  While the cat  blah.txt  is  fin-
       ished, the cat >	blah.ps	is not,	and will not be	finished until the re-
       mote  enscript process finishes writing.	 The enscript process will not
       finish writing until it is finished reading,  but  that	client->server
       half  of	 the socket is still open and will not be closed until all the
       client processes	are done.  The result is deadlock.

       So, we use sockdown to close half of the	pipe

       client$ hose server 3000	-in -out \
	    sh -c " ( cat blah.txt ; sockdown )	& cat >	blah.ps	"

       This way	when the cat blah.txt is done, half of the socket is shut down
       and the remote enscript process runs out	of input, causing it to	 flush
       its output and exit, so eventually the whole mess finishes cleanly.

       Note:  the  & on	the hose is necessary to prevent another deadlock.  If
       we simply used the ; to serialize the two cat processes it is  possible
       that  the  enscript would fill up its write buffer before the first cat
       was done	causing	both processes to block	and preventing the second  cat
       from draining the pipe.

       Of  course, that	idiomatic usage	of hose	is so useful that it is	a spe-
       cial form:

       client$ hose server 3000	-slave < blah.txt > blah.ps

       Ian Stirling <root@mauve.demon.co.uk> informs me	that sockdown  can  be
       used  in	 Linux's  /proc/pid/fd/	 directories to	tear down hung network
       connections.  I have since used this myself on a	wedged MOMspider.   To
       try this, you have to know the PID of the program and the file descrip-
       tor  of the wedged socket (can sometimes	be found by running strace and
       see if the program is stuck in a	read(2)	system call).  If the  PID  is
       991 and the socket's descriptor is 5, you do this as root:

       bash# sockdown 1	2 > /proc/991/fd/5

ERRORS
       Socket operation	on non-socket

       Invalid	argument (seen on Solaris) The fd you specified	does not refer
       to a socket.  This happens when you run sockdown	by itself (it  is  un-
       likely  that  any  of  the  file	descriptors attached to	an interactive
       shell are actually sockets) or if you goof up your faucet/hose  command
       and forgot to dup(2) one	of your	descriptors.

       Bad  file  number  You  gave  it	a bad file number for fd.  If you have
       enough skill to actually	generate this error, you probably know what is
       wrong.

       If you encounter	any other errors, clue me in.

SEE ALSO
       netpipes	(1) faucet (1),	hose (1), getpeername (1), socket  (2),	 shut-
       down (2),

NOTES
       Any normal human	would assume a program this simple has to be bug free,
       but I am	an experienced programmer.

       Just  avoid  doing  anything funky like passing sockdown	strings	and it
       should serve you	well.  You should not have to pass  it	any  arguments
       unless you are doing something fairly funky.

       Perhaps	I should ditch the shutdown -a semantics on hose since a sock-
       down 1 2	would do the job.

CREDITS
       Ian Stirling <root@mauve.demon.co.uk>, for the idea of using this  pro-
       gram in /proc on	a Linux	machine.

COPYRIGHT
       Copyright (C) 1995-1998 Robert Forsman

       This program is free software; you can redistribute it and/or modify it
       under  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  MER-
       CHANTABILITY  or	FITNESS	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/

				 July 7, 1998			   SOCKDOWN(1)

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

home | help