パスワードを忘れた? アカウント作成
658755 journal

gatekeeperの日記: TCPとUDPの違い 2

日記 by gatekeeper

厳密にいうと、ストリーム型(TCP)とデータグラム型(UDP)の違い。
# 実はUNIXドメインソケットでしか確認してない。

ストリーム型(TCP)は信頼性ありで、データグラム型(UDP)は信頼性なしなどと思っていたけど、
それはあくまで媒体となる TCP と UDP の性質みたい。
UNIXドメインソケットは常に信頼できると Linux の "man 7 unix" に書いてある。

ストリーム型というのは1個のデーターをためておく場所(ストリーム)があって、
ストリームの性質としては最初に入れたデーターが最初に出てくる。(要はFIFOだな)
データグラム型というのは、メッセージ単位で保存される。

それがどういうことになるかというと、ストリーム型では何回かに分けて書き込んだデーターを
一気に読み込んだり、 逆に一度に書き込んだデーターを細切れで読み出したりできる。
つまり、読み書きの境界はストリームに入った時点で保存されない。
ところがデータグラム型ではメッセージ単位なのでメッセージの境界が保存されていて、
読み込みと書き込みは常にペアでなければいけない。
上のような書き込みと読み込みの回数が違うようなことはできない。
データを2回書き込んだとしても、1回目の読み込みで返ってくるのは あくまで1回目に書き込んだ分だけ。
でもってその読み込みのときにバッファーが小さかったりして部分的 にしか読めなかったとしても、
1回目の読み込み終了時点で1回目のメッセージは廃棄される。
# システムバッファーから除去しないフラグ(recv()のMSG_PEEKのことね)をつければ
# もちろん話は別...だと思う。

これって基本!?
つか、よく言う「ストリーム」(C++のiostreamとかJavaのInputStream)の意味が
やっとわかった感じ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

読み込み中...