From: WATANABE Tetsuya Date: 2002-03-28T13:09:24+09:00 Subject: [ruby-dev:16633] socket.c/sock_addrinfo() 渡辺哲也です。 ruby 1.7.2 2002-03-26 以降での話 です。確認しているのはいまのとこ ろ Linux です。 socket.c 中で udp_init() udp_connect() udp_bind() などで使用されている sock_addrinfo() なのですが、 この関数中で ------------------------------ hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = flags; ------------------------------ と、固定的に SOCK_STREAM を指定し ています。 /etc/service 中に udp の定義しか ない場合には、サービス名からポー ト番号がとりだせないようです。 # 該当するものがなくてもエラーに # ならないようです? (これは追いか # けていません) 一応確認のために、udp 系用の sock_addrinfo() を用意すると期待 通に動きます。 とりあえずの確認には次のスクリプ トが使えます。 「mandelspawn」は、/etc/services 中に udp の定義しかありません。 ------------------------------ require 'socket' udp = UDPSocket.open port = 'mandelspawn' host = 'localhost' udp.bind(host, port) sleep 10 ------------------------------ でてくるエラーメッセージです ------------------------------ $ ruby udpd.rb udpd.rb:14:in `bind': Cannot assign requested address - "bind(2)" (Errno::EADDRNOTAVAIL) from udpd.rb:14 ------------------------------ どこまで SOCK_STREAM でどこから SOCK_DGRAM にすればいいのか悩んだ ので、パッチは作成しませんでした。 とりあえず udp のサーバを作りたかっ たので...