Writes s in the non-blocking manner.
If there is buffered data, it is flushed first. This may block.
write_nonblock
returns number of bytes written to the SSL
connection.
When no data can be written without blocking it raises OpenSSL::SSL::SSLError
extended by IO::WaitReadable
or IO::WaitWritable
.
IO::WaitReadable
means SSL
needs to read internally so write_nonblock
should be called again after the underlying IO
is readable.
IO::WaitWritable
means SSL
needs to write internally so write_nonblock
should be called again after underlying IO
is writable.
So OpenSSL::Buffering#write_nonblock
needs two rescue clause as follows.
# emulates blocking write. begin result = ssl.write_nonblock(str) rescue IO::WaitReadable IO.select([io]) retry rescue IO::WaitWritable IO.select(nil, [io]) retry end
Note that one reason that write_nonblock
reads from the underlying IO
is when the peer requests a new TLS/SSL handshake. See the openssl FAQ for more details. www.openssl.org/support/faq.html
By specifying a keyword argument exception to false
, you can indicate that write_nonblock
should not raise an IO::Wait*able exception, but return the symbol :wait_writable
or :wait_readable
instead.
A wrapper class to use a StringIO
object as the body and switch to a TempFile when the passed threshold is passed. Initialize the data from the query.
Handles multipart forms (in particular, forms that involve file uploads). Reads query parameters in the @params field, and cookies into @cookies.
Parse uri
into a [uri, option] pair.
The DRbProtocol
module asks each registered protocol in turn to try to parse the URI
. Each protocol signals that it does not handle that URI
by raising a DRbBadScheme
error. If no protocol recognises the URI
, then a DRbBadURI
error is raised.
Parse uri
into a [uri, option] pair.
The DRbProtocol
module asks each registered protocol in turn to try to parse the URI
. Each protocol signals that it does not handle that URI
by raising a DRbBadScheme
error. If no protocol recognises the URI
, then a DRbBadURI
error is raised.
Sets the HTTP
Range: header. Accepts either a Range
object as a single argument, or a beginning index and a length from that index. Example:
req.range = (0..1023) req.set_range 0, 1023
Returns an Integer
object which represents the HTTP
Content-Length: header field, or nil
if that field was not provided.
Returns a Range
object which represents the value of the Content-Range: header field. For a partial entity body, this indicates where this fragment fits inside the full entity body, as range of byte offsets.
Returns a content type string such as “text”. This method returns nil if Content-Type: header field does not exist.
returns a Time
that represents the Last-Modified field.
Signs in with the RubyGems API at sign_in_host
and sets the rubygems API key.
Invokes system, but silences all output.
Enumerates the parents of directory
.
Set
the effective user ID, and if possible, the saved user ID of the process to the given user. Returns the new effective user ID. Not available on all platforms.
[Process.uid, Process.euid] #=> [0, 0] Process::UID.grant_privilege(31) #=> 31 [Process.uid, Process.euid] #=> [0, 31]
Exchange real and effective user IDs and return the new effective user ID. Not available on all platforms.
[Process.uid, Process.euid] #=> [0, 31] Process::UID.re_exchange #=> 0 [Process.uid, Process.euid] #=> [31, 0]