sockdown

Hurricane Electric Internet Services: Accounts starting at $9.95/month
Hurricane Electric Internet Services

NAME

       sockdown - shutdown(2) a socket


SYNOPSIS

       sockdown [fd [how] ]



DESCRIPTION

       sockdown  performs  the  shutdown(2) system call on one of
       its file descriptors specified by fd.  The possible values
       for how are
              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 enters 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 finished, the cat > blah.ps is
       not, and will not be finished until  the  remote  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 eventu-
       ally 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.



ERRORS

       Socket operation on non-socket
         The  fd  you specified does not refer to a socket.  This
       happens when you run sockdown by itself  (it  is  unlikely
       that  any  of the file descriptors attached to an interac-
       tive 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),
       shutdown(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 sockdown 1 2 would do the job.



CREDITS

       ``Hi Mom! Hi Dad!''



COPYRIGHT

       Copyright (C) 1995 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 MERCHANTABILITY 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@cis.ufl.edu
        Purple Frog Software
        http://www.purplefrog.com/~thoth/
Hurricane Electric Internet Services: Accounts starting at $9.95/month
Hurricane Electric Internet Services
Copyright (C) 1998 Hurricane Electric. All Rights Reserved.