# typed: strict # frozen_string_literal: true require "socket" module OS module Mac # Wrapper around UNIXSocket to allow > 104 characters on macOS. module UNIXSocketExt module ClassMethods extend T::Helpers requires_ancestor { Kernel } sig { params(path: String).returns(String) } def sockaddr_un(path) if path.bytesize > 252 # largest size that can fit into a single-byte length raise ArgumentError, "too long unix socket path (#{path.bytesize} bytes given but 252 bytes max)" end [ path.bytesize + 3, # = length (1 byte) + family (1 byte) + path (variable) + null terminator (1 byte) 1, # AF_UNIX path, ].pack("CCZ*") end end end end end Utils::UNIXSocketExt.singleton_class.prepend(OS::Mac::UNIXSocketExt::ClassMethods)