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