- 论坛徽章:
- 1
|
本帖最后由 seufy88 于 2014-04-01 21:01 编辑
这两个的区别在网上都有好多文章.
只是我还是有不明点.所以想请教一下大家.
这里不考虑多进程共享socket id这种情况.
单纯的讨论.
close (socket id): 马上发送FIN信号,所有的未完成发送或者接受的数据都将被丢失
close成功后,对这个socket id进行read/write都将失败.
但是从TCP层面将,close只是能控制本方发送FIN到对方,并不能控制对方何时发送FIN过来.
请问在这种情况下,如果对方还发data过来,本方的TCP层还会发送ack of data给对方吗?
本方 对方
| |
close|-------FIN----->|
|<--- ack of FIN -|
| |
|<----data ------ |
|---ack of data -->|?????
在这种情况下,如果对方还发送data(而不是FIN)过来,本方是否直接返回RST?
shutdown (socket id):如果关闭写,如果输出缓冲区内有数据,则所有的数据将发送出去后将发送一个FIN信号
如果关闭写,则对这个socket的后续write会失败,但是允许后续对这个socket进行read.
本方 对方
| |
|-------FIN----->|
|<--- ack of FIN -|
| |
|<----data ------ |
|---ack of data -->|
========
close,shutdown都会在TCP层面主动发送FIN
但是这些都只是local侧的,并不能掌控对方侧的行为(是继续发data还是发送FIN)
在这种情况下,我们local侧分别在使用close,shutdown后,如果对方侧仍有data发送过来,是否会有不同的操作?
已知的是shutdown之后,如果对方侧仍有data到达,则local侧可以发送回ack of data
但是close的情况又是怎么样的呢?
|
|