Skip to content
Please note that GitHub no longer supports your web browser.

We recommend upgrading to the latest Google Chrome or Firefox.

Learn more
multibinder is a tiny ruby server that makes writing zero-downtime-reload services simpler.
Branch: master
Clone or download
Cannot retrieve the latest commit at this time.
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin Fix haproxy wrapper to keep FDs around until exec. Jul 27, 2018
haproxy Update README.md Jan 27, 2017
lib Bump version to 0.0.5. Sep 26, 2017
script
test Fix haproxy wrapper to keep FDs around until exec. Jul 27, 2018
.gitignore
Gemfile
LICENSE.txt
README.md
Rakefile
multibinder.gemspec

README.md

multibinder

multibinder is a tiny ruby server that makes writing zero-downtime-reload services simpler. It accepts connections on a UNIX domain socket and binds an arbitrary number of LISTEN sockets given their ip+port combinations. When a bind is requested, the LISTEN socket is sent over the UNIX domain socket using ancillary data. Subsequent identical binds receive the same LISTEN socket.

multibinder runs on its own, separate from the daemons that use the sockets. multibinder can be re-exec itself to take upgrades by sending it a SIGUSR1 - existing binds will be retained across re-execs.

Server usage

After installing multibinder, you can run the multibinder daemon:

bundle exec multibinder /path/to/control.sock

Client usage

The multibinder library retrieves a socket from a local multibinder server, communicating over the socket you specify in the MULTIBINDER_SOCK environment variable (which has to be the same as specified when running multibinder, and the user must have permission to access the file).

require 'multibinder'

server = MultiBinder.bind '127.0.0.1', 8000

# use the server socket
# ... server.accept ...

The socket has close-on-exec disabled and is ready to be used in Ruby or passed on to a real service like haproxy via spawn/exec. For an example of using multibinder with haproxy (there are a couple of tricks), see the haproxy test shim.

You can’t perform that action at this time.