Socketry

High-level wrappers for Ruby sockets with advanced thread-safe timeout support.
Does not require Celluloid! Socketry provides sockets with thread-safe timeout support that can be used with any multithreaded Ruby app. That said, Socketry can also be used to provide asynchronous I/O with Celluloid::IO.
Motivation
By default, Ruby sockets do not provide a built-in timeout mechanism. The only timeout mechanism provided by the language leverages timeout.rb, which uses unsafe multithreaded behaviors to implement timeouts.
While Socketry provides a synchronous, blocking API similar to Ruby's own
TCPSocket and UDPSocket classes, behind the scenes it uses non-blocking I/O
to implement thread-safe timeouts.
Highly modular and pluggable, Socketry also provides the flexibility to seamlessly leverage Celluloid::IO for event-driven I/O.
Installation
Add this line to your application's Gemfile:
gem "socketry"
And then execute:
$ bundle
Or install it yourself as:
$ gem install socketry
Basic Usage
Below is a basic example of how to use Socketry to make an HTTPS request:
require "socketry"
socket = Socketry::SSL::Socket.connect("github.com", 443)
socket.writepartial("GET / HTTP/1.0\r\nHost: github.com\r\n\r\n")
p socket.readpartial(1024)
TCP, UDP, and SSL servers and sockets also available.
Documentation
Please see the Socketry wiki for more detailed documentation and usage notes.
YARD API documentation is also available.
Contributing
- Fork this repository on github
- Make your changes and send us a pull request
- If we like them we'll merge them
- If we've accepted a patch, feel free to ask for commit access
License
Copyright (c) 2016 Tony Arcieri. Distributed under the MIT License. See LICENSE.txt for further details.