class IO::Endpoint::UNIXEndpoint
This class doesn’t exert ownership over the specified unix socket and ensures exclusive access by using ‘flock` where possible.
def bind(&block)
def bind(&block) super rescue Errno::EADDRINUSE # If you encounter EADDRINUSE from `bind()`, you can check if the socket is actually accepting connections by attempting to `connect()` to it. If the socket is still bound by an active process, the connection will succeed. Otherwise, it should be safe to `unlink()` the path and try again. if !bound? File.unlink(@path) rescue nil retry else raise end end
def bound?
def bound? self.connect do return true end rescue Errno::ECONNREFUSED return false rescue Errno::ENOENT return false end
def initialize(path, type = Socket::SOCK_STREAM, **options)
def initialize(path, type = Socket::SOCK_STREAM, **options) # I wonder if we should implement chdir behaviour in here if path is longer than 104 characters. super(Address.unix(path, type), **options) @path = path end
def inspect
def inspect "\#<#{self.class} path=#{@path.inspect}>" end
def to_s
def to_s "unix:#{@path}" end