こんにちは。たけうちかほりです。

昨日、会社の自分のマシンを NT4.0(SP6) にしました。で、

http://jarh.hoops.livedoor.com/

から、

・ruby 1.4.6 (2000-08-16) [i386-cygwin] 
	(http://jarh.hoops.livedoor.com/ruby/rbcw146.exe)
・cygwin1.dll - 1.1.4(0.26/3/2) 2000-08-03 20:53
	(http://jarh.hoops.livedoor.com/cygwin/cygwin1-1.1.4.dll.zip)

を持ってきてインストールしたんですが socket が動かなくて困っています。
TCPsocket の open & peeraddr 取得 & close ならエラーは出ないんですが、
write するとコケます。

下のスクリプト(sockettest.rb)を実行すると

require 'socket'
s = TCPsocket.open("xxx.xxx.co.jp", 80)
p s.peeraddr
s.write "GET / HTTP/1.0\n\n"
while s.gets
  print
end
s.close

結果が下のようになります。

D:\kahori\ruby>ruby sockettest.rb
["AF_INET", 80, "xxx.xxx.co.jp", "xxx.xxx.xxx.xxx"]
sockettest.rb:5:in `write': Invalid argument (Errno::EINVAL)
	from sockettest.rb:5

Invalid argument というのは何なんでしょう。どんな場合に起こりますか?

s.write "GET / HTTP/1.0\n\n" を s.write (引数なし) にすると当然

sockettest.rb:5:in `write': wrong # of arguments(0 for 1) (ArgumentError)

になります。s.write nil (引数 nil) だとエラーは起きないで、ソケット
から来るはずの文字列を待ち続けます。

どなたかアドバイス下さいませ。よろしくお願いいたします。

--
たけうちかほり
takeuchi / kahori.com