def connect(socket, host, port)
begin
ip = IPAddr.new(host)
rescue ArgumentError
ip = IPAddr.new(Socket.getaddrinfo(host, nil, :INET, :STREAM).first)
end
socket << [VERSION, 0x01, port].pack("CCn") << ip.hton
socket << user if user
socket << 0x00
version, status, port = socket.read(4).unpack("CCn")
check_version(version, 0x00)
ip = IPAddr.ntop(socket.read(4))
case status
when 0x5A
when 0x5B
raise "request rejected or failed"
when 0x5C
raise "request rejected becasue SOCKS server cannot connect to identd on the client"
when 0x5D
raise "request rejected because the client program and identd report different user-ids"
else
raise "unknown SOCKS error"
end
end