TCPソケットはメッセージではなくストリームなので、一部のシステムではバークレーソケットsend()
の機能が必要以上のデータを送信しないことがあります。 Rubyソケットはバークレーソケット上の非常に薄いラッパーなので、AFAIK Socket#send
はバークレーソケットsend()
とまったく同じように動作します。だから、RubyのTCPソケット経由で完全なメッセージを送信する正しい方法は何ですか? Pythonでは、それはsendall()
と呼ばれる特殊な関数です。しかし、Rubyで、私は手動でそのようなコードを記述する必要があります。Rubyソケットの部分書き込みを正しく処理する方法は?
while (sent = sock.send(data, 0) < data.length do
data = data[ sent..-1 ]
end
ありがとう、ちょうど私が必要なもの。 – grigoryvp