summaryrefslogtreecommitdiff
path: root/sample/dualstack-fetch.rb
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-05-26 03:38:39 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-05-26 03:38:39 +0000
commita5d64434dd91fa463b7130e11cf1734d0ebd0287 (patch)
treea12fdf6faf528343d284ec5848a6bf779841204e /sample/dualstack-fetch.rb
parent32513e9dcebe6bb04c5eb239f152493c92edae34 (diff)
Synchronize MANIFEST with reality. Add missing files.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1463 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'sample/dualstack-fetch.rb')
-rw-r--r--sample/dualstack-fetch.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/sample/dualstack-fetch.rb b/sample/dualstack-fetch.rb
new file mode 100644
index 0000000..ab8d091
--- /dev/null
+++ b/sample/dualstack-fetch.rb
@@ -0,0 +1,48 @@
+# simple webpage fetcher
+
+# The code demonstrates how a multi-protocol client should be written.
+# TCPsocket is using getaddrinfo() internally, so there should be no problem.
+
+require "socket"
+
+if ARGV.size != 1
+ STDERR.print "requires URL\n"
+ exit
+end
+
+url = ARGV[0]
+if url !~ /^http:\/\/([^\/]+)(\/.*)$/
+ STDERR.print "only http with full hostname is supported\n"
+ exit
+end
+
+# split URL into host, port and path
+hostport = $1
+path = $2
+if (hostport =~ /^(.*):([0-9]+)$/)
+ host = $1
+ port = $2
+else
+ host = hostport
+ port = 80
+end
+if host =~ /^\[(.*)\]$/
+ host = $1
+end
+
+#STDERR.print "url=<#{ARGV[0]}>\n"
+#STDERR.print "host=<#{host}>\n"
+#STDERR.print "port=<#{port}>\n"
+#STDERR.print "path=<#{path}>\n"
+
+STDERR.print "conntecting to #{host} port #{port}\n"
+c = TCPsocket.new(host, port)
+dest = Socket.getnameinfo(c.getpeername,
+ Socket::NI_NUMERICHOST|Socket::NI_NUMERICSERV)
+STDERR.print "conntected to #{dest[0]} port #{dest[1]}\n"
+c.print "GET #{path} HTTP/1.0\n"
+c.print "Host: #{host}\n"
+c.print "\n"
+while c.gets
+ print
+end