instance method OpenSSL::Buffering#write_nonblock

write_nonblock(s) -> Integer[permalink][rdoc]

文字列 s をノンブロッキングモードで書き込みます。

成功した場合、書き込んだバイト数を返します。

1 バイトも書くことができず、ソケットの状態が変化するのを待つ必要がある場合は例外を発生させます。例外が発生した場合、内部のソケットが利用可能になってから再びこのメソッドを呼んでください。

ただし内部バッファに書き込んでいないデータが残っている場合は、まずバッファの内容をすべて出力してします。この時点でブロックする可能性があります。

基本的には IO#write_nonblock と同様です。しかし以下のような違いもあります。

このメソッドはソケットが読み込み不可能(IO::WaitReadable) という理由で例外を発生させる可能性があります。暗号プロトコルの関係上データの書き込みになんらかのデータの送受信が必要になる場合があるからです。

内部のソケットが読み込み/書き込み可能である場合でも、このメソッドで文字列を書き込めず、例外が発生する場合があります。というのは、暗号プロトコルによっては(とくにブロック暗号では) 通信データをある程度の大きさのブロック単位で暗号化/復号化するためです。

[PARAM] s:
出力する文字列
[EXCEPTION] OpenSSL::SSL::SSLError:
ソケットが読み込み/書き込み可能状態になるのを待つ必要がある場合に発生します。読み込み可能状態を待つ必要がある場合には IO::WaitReadable を、書き込み可能状態を待つ必要がある場合には IO::WaitWritable を、それぞれ extend した例外オブジェクトが生成されます。