- 論壇徽章:
- 1
|
本帖最后由 seufy88 于 2014-04-01 21:01 編輯
這兩個(gè)的區(qū)別在網(wǎng)上都有好多文章.
只是我還是有不明點(diǎn).所以想請教一下大家.
這里不考慮多進(jìn)程共享socket id這種情況.
單純的討論.
close (socket id): 馬上發(fā)送FIN信號,所有的未完成發(fā)送或者接受的數(shù)據(jù)都將被丟失
close成功后,對這個(gè)socket id進(jìn)行read/write都將失敗.
但是從TCP層面將,close只是能控制本方發(fā)送FIN到對方,并不能控制對方何時(shí)發(fā)送FIN過來.
請問在這種情況下,如果對方還發(fā)data過來,本方的TCP層還會發(fā)送ack of data給對方嗎?
本方 對方
| |
close|-------FIN----->|
|<--- ack of FIN -|
| |
|<----data ------ |
|---ack of data -->|?????
在這種情況下,如果對方還發(fā)送data(而不是FIN)過來,本方是否直接返回RST?
shutdown (socket id):如果關(guān)閉寫,如果輸出緩沖區(qū)內(nèi)有數(shù)據(jù),則所有的數(shù)據(jù)將發(fā)送出去后將發(fā)送一個(gè)FIN信號
如果關(guān)閉寫,則對這個(gè)socket的后續(xù)write會失敗,但是允許后續(xù)對這個(gè)socket進(jìn)行read.
本方 對方
| |
|-------FIN----->|
|<--- ack of FIN -|
| |
|<----data ------ |
|---ack of data -->|
========
close,shutdown都會在TCP層面主動(dòng)發(fā)送FIN
但是這些都只是local側(cè)的,并不能掌控對方側(cè)的行為(是繼續(xù)發(fā)data還是發(fā)送FIN)
在這種情況下,我們local側(cè)分別在使用close,shutdown后,如果對方側(cè)仍有data發(fā)送過來,是否會有不同的操作?
已知的是shutdown之后,如果對方側(cè)仍有data到達(dá),則local側(cè)可以發(fā)送回ack of data
但是close的情況又是怎么樣的呢?
|
|