0.02
No commit activity in last 3 years
No release in over 3 years
Wraps Socket, providing timeouts for connect, write, and read without Timeout.timeout.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

TCPTimeout

A wrapper around Ruby Sockets providing timeouts for connect, write, and read operations using Socket#*_nonblock methods and IO.select instead of Timeout.timeout.

Usage

gem install tcp_timeout

Pass one or more of :connect_timeout, :write_timeout, and :read_timeout as options to TCPTimeout::TCPSocket.new. If a timeout is omitted or nil, that operation will behave as a normal Socket would. On timeout, a TCPTimeout::SocketTimeout (subclass of SocketError) will be raised.

When calling #read with a byte length it is possible for it to read some data before timing out. If you need to avoid losing this data you can pass a buffer string which will receive the data even after a timeout.

Other options:

  • :family - set the address family for the connection, e.g. :INET or :INET6
  • :local_host and :local_port - the host and port to bind to

TCPTimeout::TCPSocket supports only a subset of IO methods, including:

close closed? read read_nonblock readbyte readpartial write write_nonblock

Example:

begin
  sock = TCPTimeout::TCPSocket.new(host, port, connect_timeout: 10, write_timeout: 9)
  sock.write('data')
  sock.close
rescue TCPTimeout::SocketTimeout
  puts "Operation timed out!"
end