Skip to content

Instantly share code, notes, and snippets.

@koko1000ban
Created October 30, 2012 13:59
Show Gist options
  • Save koko1000ban/3980322 to your computer and use it in GitHub Desktop.
Save koko1000ban/3980322 to your computer and use it in GitHub Desktop.
IPv6 testing
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'cool.io'
class Handler < Coolio::Socket
def initialize(io, on_message)
super(io)
if io.is_a?(TCPSocket)
opt = [1, @timeout.to_i].pack('I!I!') # { int l_onoff; int l_linger; }
io.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, opt)
end
puts "accepted socket object_id=#{self.object_id}"
@on_message = on_message
end
def on_connect
puts "connect!"
end
def on_read(data)
puts "on_read: #{data}"
end
end
def on_message(msg)
puts "on_message: #{msg}"
end
server = Coolio::TCPServer.new("::1", 12347, Handler, method(:on_message))
# server = Coolio::TCPServer.new("127.0.0.1", 12347, Handler, method(:on_message))
loop = Coolio::Loop.new
loop.attach(server)
loop.run
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'socket'
host = "::1"
#host = "127.0.0.1"
port = 12347
send_timeout = 5
packed_sockaddr = Socket.pack_sockaddr_in(port, host)
port_unpacked, host_unpacked = Socket.unpack_sockaddr_in(packed_sockaddr)
sock = TCPSocket.new(host_unpacked, port_unpacked)
opt = [1, send_timeout.to_i].pack('I!I!') # { int l_onoff; int l_linger; }
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, opt)
opt = [send_timeout.to_i, 0].pack('L!L!') # struct timeval
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDTIMEO, opt)
sock.write "hogehoge"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment