"Because it's up-side down".
"Why is that?"
"It makes replies harder to read."
"Why not?"
"Please don't top-post." - Sherm Pendley, Mac OS X Perl list



On 2/9/06, Jeff Pang <[EMAIL PROTECTED]> wrote:
> ok,I'll give my question and hope get some answers from here,:-)
>
> I have a pair of Client-Server Socket programs.When the client have finished 
> writing the datas,it should call the 'close()' or 'shutdown()' to close the 
> client's socket.And,when the server receive the EOF coming from client,it 
> should call the 'close()' or 'shutdown()' to close the socket too.Then the 
> established socket between client and server should be freed.
>
> As we know,the close behavier under tcp socket is shown as below:
>
>        Client   --->  FIN  --->  Server
>        Client   <---  ACK  <---  Server
>
>        Client   <---  FIN  <---  Server
>
>        Server   --->  ACK  --->  Client
>
>
>
> The question I want to know is,when the 'close()' call happened,if it should 
> generate a 'FIN' and send it to another end?If it's true,then at the server 
> end,when it receive the 'EOF' coming from client,it can delay for some time 
> to call 'close()',so the 'FIN' should not be sent to client immediately,is it?
>
>

I think your arrows are confused down there at the bottom, but it's a
little more complicated than that. The packets sent after FIN aren't
smiple ACKs, they have different types depending on what sequence
number they have, and who's sending them. If memory serves, FIN from
the server generates a FIN_ACK from the server, which generates an
ACKPSH from the client...but don't quote me on that, it's been a long
time.

The real question here, though, is "why are you worrying about this?"
This is why standard libraries exist. People have put decads of work
into abstracting the socket layer; you don't need to reinvent the
wheel. C Programmers have the standard socket library Socket.h. In
Perl, we have the Socket (basically just a wrapper for Socket.h) and
user-friendly IO::Socket modules. Let Them worry about the connection
for you.

Just call close() or shutdown() and don't sewat the details. If you
really need to know what happens when you call close(), read the
source. The nitty gritty TCP sequencing and timing is a little bit
beyond the scope of a beginner's list.

HTH,

-- jay
--------------------------------------------------
This email and attachment(s): [  ] blogable; [ x ] ask first; [  ]
private and confidential

daggerquill [at] gmail [dot] com
http://www.tuaw.com  http://www.dpguru.com  http://www.engatiki.org

values of β will give rise to dom!

Reply via email to