Class: UNIXSocket

Inherits:
BasicSocket show all
Includes:
IO::TransferIO
Defined in:
lib/rubysl/socket.rb

Direct Known Subclasses

UNIXServer

Constant Summary

Constants inherited from BasicSocket

BasicSocket::FFI

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BasicSocket

#close_read, #close_write, #do_not_reverse_lookup, do_not_reverse_lookup, #do_not_reverse_lookup=, do_not_reverse_lookup=, for_fd, from_descriptor, #getpeername, #getsockname, #getsockopt, #recv, #recv_nonblock, #send, #setsockopt, #shutdown

Constructor Details

#initialize(path) ⇒ UNIXSocket

Returns a new instance of UNIXSocket.



1122
1123
1124
1125
1126
1127
# File 'lib/rubysl/socket.rb', line 1122

def initialize(path)
  @no_reverse_lookup = self.class.do_not_reverse_lookup
  @path = path
  unix_setup
  @path = ""  # Client
end

Class Method Details

.socketpair(type = Socket::SOCK_STREAM, protocol = 0) ⇒ Object Also known as: pair



1209
1210
1211
# File 'lib/rubysl/socket.rb', line 1209

def socketpair(type=Socket::SOCK_STREAM, protocol=0)
  Socket.socketpair(Socket::PF_UNIX, type, protocol, self)
end

Instance Method Details

#addrObject



1180
1181
1182
1183
1184
# File 'lib/rubysl/socket.rb', line 1180

def addr
  sockaddr = Socket::Foreign.getsockname descriptor
  _, sock_path = sockaddr.unpack('SZ*')
  ["AF_UNIX", sock_path]
end

#from_descriptor(fixnum) ⇒ Object



1138
1139
1140
1141
# File 'lib/rubysl/socket.rb', line 1138

def from_descriptor(fixnum)
  super
  @path = nil
end

#pathObject



1129
1130
1131
1132
1133
1134
1135
1136
# File 'lib/rubysl/socket.rb', line 1129

def path
  unless @path
    sockaddr = Socket::Foreign.getsockname descriptor
    _, @path = sockaddr.unpack('SZ*')
  end

  return @path
end

#peeraddrObject



1186
1187
1188
1189
1190
# File 'lib/rubysl/socket.rb', line 1186

def peeraddr
  sockaddr = Socket::Foreign.getpeername descriptor
  _, sock_path = sockaddr.unpack('SZ*')
  ["AF_UNIX", sock_path]
end

#recv_io(klass = IO, mode = nil) ⇒ Object



1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
# File 'lib/rubysl/socket.rb', line 1192

def recv_io(klass=IO, mode=nil)
  begin
    fd = recv_fd
  rescue PrimitiveFailure
    raise SocketError, "file descriptor was not passed"
  end

  return fd unless klass

  if klass < BasicSocket
    klass.for_fd(fd)
  else
    klass.for_fd(fd, mode)
  end
end

#recvfrom(bytes_read, flags = 0) ⇒ Object

Coding to the lowest standard here.



1117
1118
1119
1120
# File 'lib/rubysl/socket.rb', line 1117

def recvfrom(bytes_read, flags = 0)
  # FIXME 2 is hardcoded knowledge from io.cpp
  socket_recv(bytes_read, flags, 2)
end