module ServerEngine::RbWinSock

Public Class Methods

raise_last_error(name) click to toggle source
# File lib/serverengine/winsock.rb, line 108
def self.raise_last_error(name)
  errno = rb_w32_map_errno(WinSock.last_error)
  raise SystemCallError.new(name, errno)
end
wrap_io_handle(sock_class, handle, flags) click to toggle source
# File lib/serverengine/winsock.rb, line 115
def self.wrap_io_handle(sock_class, handle, flags)
  begin
    fd = rb_w32_wrap_io_handle(handle, flags)
    if fd < 0
      raise_last_error("rb_w32_wrap_io_handle(3)")
    end

    sock = sock_class.for_fd(fd)
    wrapped = true
    sock.define_singleton_method(:handle) { handle }

    return sock
  ensure
    unless wrapped
      WinSock.CloseHandle(handle)
    end
  end
end