RSTを受信したときの挙動 [TCP]
TCPにはRSTというパケットがある。
RSTとは、簡単に言うと強制終了を示すものである。
このRSTを受信したときの挙動がLinuxとWindowsで違うことを発見したのでメモしておく。
(WindowsはXPとVistaです。)
Linuxの場合、
パケット1→パケット2→RSTという順序で受信したとすると、
readシステムコールは、パケット1、パケット2をユーザプログラムに読み込ませた後にエラーを返す。
Windowsの場合、
パケット1→パケット2→RSTという順序で受信したとすると、
パケット1、パケット2がソケットバッファに残っていたとしても、
recv関数は、ユーザプログラムにパケット1、パケット2を受信させることなくエラーを返す。
RSTが相手から送られてきた時点で、そのストリームは異常な状態に陥ったということなので、
受信済みのデータ(パケット1、パケット2)をユーザに読ませるかどうかは重要ではないはず、
ということで、このような差が生まれてしまったのだろう。
コメント 0