wayne@ultra.com (Wayne Hathaway) (12/08/90)
Sorry to bother the TCP/IP group with a BSD-sockets-specific question, but it really does relate to protocol behavior. Anyway, my question is the following: For connected stream sockets, are there ANY semantic differences between shutdown(2) and close()? If so, can somebody please explain them? (For example, if multiple processes are sharing a connected socket, only the LAST close() will have an effect; is this true with shutdown(2)? Is "data in the pipe" treated any differently? Etc ...) Oh, when I say "shutdown(2)" I mean the shutdown() system call with a "how" parameter of "2," meaning shutdown both read and write; I am NOT alluding to section 2 of the manual. Thanks muchly! Wayne Hathaway domain: wayne@Ultra.COM Ultra Network Technologies uucp: ...!ames!ultra!wayne 101 Daggett Drive phone: 408-922-0100 x132 San Jose, CA 95134 direct: Hey, you! PS: For that matter, can anybody explain what shutdown does with a connected DATAGRAM socket? Thnx again.
gwilliam@SH.CS.NET (George Williams) (12/19/90)
Date: 7 Dec 90 17:23:24 GMT From: Wayne Hathaway <usc!zaphod.mps.ohio-state.edu!mips!ultra!wayne@ucs d.edu> Subject: BSD sockets question Sorry to bother the TCP/IP group with a BSD-sockets-specific question, but it really does relate to protocol behavior. Anyway, my question is the following: For connected stream sockets, are there ANY semantic differences between shutdown(2) >> Generates a TCP level abort. Sent out of band or expedited. >> Can bypass 'close' and 'data'. Especially in LAN environments. and close()? >> Allows for graceful shutdown i.e. only one half ( sending TCB ) of >> connection is deleted. Sent on normal data flow, so does not bypass >> data in transient. Process allowed to receive data already in the >> pipe. If so, can somebody please explain them? (For example, if multiple processes are sharing a connected socket, only the LAST close() will have an effect; >> Really each close has an affect on the socket level. A trick used in >> BSD UNIX is to obtain a new socket desciptor, pass the options to >> a newly forked child, and go back to listening on the original socket >> for new connection requests. When you close the origional or 'well >> known port' as you indicated above the (LAST); service is gone or >> no longer available. There are variation on this scenario due to >> implementation and system specifics but the rules are essentially the same. >> In this manner you can achieve concurrency within a single server process. >> Note: I recall working with some interfaces ( don't now if BSD ) derivatives >> or not that turned shutdown into a close for the receiving process. >> Don't recall if this was/is a bug or a feature...yes, I know someone >> out there is gonna tell me RTFRFC -:).. is this true with shutdown(2)? Is "data in the pipe" treated any differently? Etc ...) >> Shutdown would be issued when an entire server or process goes away, >> removing a 'well known port' due to administative or disruptive (error) >> processing. Oh, when I say "shutdown(2)" I mean the shutdown() system call with a "how" parameter of "2," meaning shutdown both read and write; I am NOT alluding to section 2 of the manual. Thanks muchly! Wayne Hathaway domain: wayne@Ultra.COM Ultra Network Technologies uucp: ...!ames!ultra!wayne 101 Daggett Drive phone: 408-922-0100 x132 San Jose, CA 95134 direct: Hey, you! PS: For that matter, can anybody explain what shutdown does with a connected DATAGRAM socket? Thnx again.