class EaseEngine::Socket

Attributes

dst_addr[RW]
err[RW]
is_disable[RW]
read_buf[RW]
read_max_size[RW]
socket[RW]
write_buf[RW]

Public Class Methods

new( *args ) click to toggle source
# File lib/ease_engine/socket.rb, line 11
def initialize( *args )
  @read_buf = EaseEngine::Buffer.new
  @write_buf = EaseEngine::Buffer.new
  @err = nil
  @read_max_size = 2048
  @dst_addr = nil
  @is_disable = false
end

Public Instance Methods

bind( host, port ) click to toggle source
# File lib/ease_engine/socket.rb, line 20
def bind( host, port )
  @socket.bind( host, port )
end
close() click to toggle source
# File lib/ease_engine/socket.rb, line 82
def close
  if ! @socket.nil?
    @socket.close
    @socket = nil
  end
end
errno() click to toggle source
# File lib/ease_engine/socket.rb, line 93
def errno
  @socket.getsockopt( ::Socket::SOL_SOCKET, ::Socket::SO_ERROR ).unpack( "i" )[ 0 ]
end
recv( max, flags = 0 ) click to toggle source
# File lib/ease_engine/socket.rb, line 40
def recv( max, flags = 0 )
  # 1回で全てのデータを読み込めるとは限らないので、複数回に分けてデータを全て読み込む
  @err = nil
  bufs = []
  while true
    begin
      buf = @socket.recv_nonblock( max, flags )
    rescue IO::EAGAINWaitReadable => err
      buf = ""
    rescue Errno::ECONNRESET => err
      buf = ""
    rescue => err
      @err = err
      buf = ""
    end
    break if buf.empty?
    
    bufs.push buf
  end
  
  buf = bufs.join
  @read_buf << buf
  @is_disable = true if bufs.empty?
  
  buf
end
recvfrom( max, flags = 0 ) click to toggle source
# File lib/ease_engine/socket.rb, line 67
def recvfrom( max, flags = 0 )
  # 最大サイズが決まっているので、1回で読み込む
  @err = nil
  begin
    result = @socket.recvfrom_nonblock( max, flags )
  rescue => err
    @err = err
    result = [ "", nil ]
  end
  
  @read_buf << result[ 0 ]
  
  result
end
send( msg, flags, *args ) click to toggle source
# File lib/ease_engine/socket.rb, line 24
def send( msg, flags, *args )
  @write_buf << msg
  @err = nil
  begin
    result = @socket.send( @write_buf.value, flags, *args )
  rescue => err
    @err = err
    result = 0
  end
  
  @write_buf >> result
  @is_disable = true if 0 == result
  
  result
end
to_i() click to toggle source
# File lib/ease_engine/socket.rb, line 89
def to_i
  @socket.to_i
end