31 lines
		
	
	
		
			809 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			809 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: strict
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require "socket"
 | |
| 
 | |
| module OS
 | |
|   module Mac
 | |
|     # Wrapper around UNIXSocket to allow > 104 characters on macOS.
 | |
|     module UNIXSocketExt
 | |
|       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
 | |
| 
 | |
| Utils::UNIXSocketExt.singleton_class.prepend(OS::Mac::UNIXSocketExt)
 | 
