Path: sranha!katsu From: katsu@sra.co.jp (WATANABE Katsuhiro) Message-ID: Date: 3 Dec 90 12:57:11 Organization: Software Research Associates, Inc.,Japan In-reply-to: t-ishii@sra.co.jp's message of 3 Dec 90 02:05:56 GMT Newsgroups: sra.unix Subject: Re: TCP send buffer size Distribution: sra References: <4805@srava.sra.co.jp> 私いはく > 逆に言えば、ソケットを利用する側から見た時には、write が成功して > 戻ってきたならば、それはすべて(socket layer での意味で)送信して > くれたことになるはずです。 記事 で t-ishii@sra.co.jp (Tatsuo Ishii) さんいはく > しかし、ちょっと前の fj.unix の <6223@icsts1.osaka-u.ac.jp> > From: saitoh@icsts1.osaka-u.ac.jp (SAITOH Akinori) > で、 > |n=write(fd, ptr, length); > |ディスクファイルなどでは、 n==length or -1 だと思ってよいので > |すが、fd がソケットだと 10KB 書こうとして 8KB しか書けないと > |かいう事態が起こります。 > > というのがありましたよね。私もそうだと思い込んでいたのですが、私&齊藤 > さんの勘違いだろうか? 石井さんは遠慮した書き方をしていますが、これは私の方の間違いでしょう。 わたしは「write() が成功して戻ってきたなら全部書けている『こともある』」 という事実と、Network Implementation Note の抽象的な表現から、 「write()が成功して戻ってきたなら『常に』全部書けている」というふうに 勘違いしていました。この論理は反例(書けないことがある)が出た時点で 崩壊しちゃいますね。(がらがらがしゃんっ) 情けなくも、ここへ来てやっと最初の質問の意味がわかりました。 > getsockopt() で SO_SNDBUF を取ってくると、たとえば NEWS OS R3.4 では > 4096 と出ます。これは、scoket に対し、1回の write() で 4096 バイトま > では送信してくれるという意味だと思っているのですが、果たしてこれは正し > いでしょうか? というのは、ソケットに関する write() は全部書ききれるとは限らないという 前提のもとで、4096 バイト以下の write(ソケット,,length) については、 (ブロックするしないに関係なく)書ききれると考えて良いかどうかという 話だったのですね。当然私にはわかりません。(;.;) -- ----____----____ 渡邊克宏@ソフトウェア工学研旧所