2

この行を使用して、Ruby (1.8.7) ソケット経由でメッセージを送信しています。

@@socket.send login_message, 0

(これはうまくいきます)

2 番目のパラメーターは何ですか? Ruby API ドキュメントで send メソッドが見つかりません...

私は最初、メッセージの C スタイルの長さだと思いました。これが、login_message.length を 2 番目のパラメーターとして使用した理由です。それはうまくいきましたが、私は奇妙な振る舞いに遭遇しました:

2 番目のパラメーターが奇数の場合、すべて正常に機能します。偶数の場合、反対側での受信時に最後の文字が失われます (反対側は C ソケットを備えた C++ プログラムです)。Wireshark を使用してネットワーク トラフィックを調べたところ、パケットが適切に表示されていることがわかりました。すべてのデータが完成しました。受け取ったときに最後の文字が失われるのはなぜですか?

ありがとうレナート

4

1 に答える 1

4

send()これは flags パラメータで、システム コールの最後のパラメータと同じです。通常は 0 にする必要がありますが、Socket::MSG_OOB(帯域外データを送信するため) のようにすることもできます。Ruby 1.9 の場合、これはBasicSocketの下に文書化されています。

于 2009-07-18T17:12:24.433 に答える