names=write_nonblock
visibility=public
kind=defined

--- write_nonblock(s) -> Integer
文字列 s をノンブロッキングモードで書き込みます。

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

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

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

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

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

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

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

