Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > opensslライブラリ > OpenSSL::Bufferingモジュール > write_nonblock
write_nonblock(s) -> Integer
[permalink][rdoc]文字列 s をノンブロッキングモードで書き込みます。
成功した場合、書き込んだバイト数を返します。
1 バイトも書くことができず、ソケットの状態が変化するのを 待つ必要がある場合は例外を発生させます。 例外が発生した場合、内部のソケットが利用可能になってから 再びこのメソッドを呼んでください。
ただし内部バッファに書き込んでいないデータが残っている場合は、 まずバッファの内容をすべて出力してします。この時点で ブロックする可能性があります。
基本的には IO#write_nonblock と同様です。しかし以下のような 違いもあります。
このメソッドはソケットが読み込み不可能(IO::WaitReadable) という理由で 例外を発生させる可能性があります。暗号プロトコルの関係上 データの書き込みになんらかのデータの 送受信が必要になる場合があるからです。
内部のソケットが読み込み/書き込み可能である場合でも、このメソッドで 文字列を書き込めず、例外が発生する場合があります。 というのは、暗号プロトコルによっては(とくにブロック暗号では) 通信データをある程度の大きさのブロック単位で暗号化/復号化 するためです。