質問 |
||
| QNo.3945315 | rubyでマルチキャスト受信するには | |
|---|---|---|
| 質問者:lakings |
WinXP、ruby1.8.6環境で、マルチキャスト受信するプログラムを作ろうと思い、Webの情報を探して以下のようにしてみました。 require "socket" require "ipaddr" s = UDPSocket.open() s.bind("0.0.0.0", 10000) mreq = IPAddr.new("X.X.X.X").hton + IPAddr.new("0.0.0.0").hton s.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, mreq) p s.recv(65535) s.close X.X.X.Xはマルチキャストアドレスです。しかし、これを実行すると、「uninitialized constant Socket::IP_ADD_MEMBERSHIP (NameError)」となってしまい、実行できません。 なにか設定が必要なのでしょうか。 |
|
困り度:
|
||
| 質問投稿日時: 08/04/13 13:34 |
||
回答 |
|
| ANo.1 | 少なくともWindows版のものではIP_ADD_MEMBERSHIPは定義されてないようです。 irb(main):016:0> Socket.constants.grep(/IP/) => ["AF_IPX", "IPPROTO_MAX", "IPPROTO_ICMP", "IPPROTO_UDP", "PF_IPX", "IPPORT_RESERVED", "IPPROTO_IGMP", "IPPROTO_IDP", "IPPORT_USERRESERVED", "IPPROTO_GGP", "IPPROTO_ND", "IPPROTO_TCP", "IPPROTO_RAW", "IPPROTO_IP", "IPPROTO_PUP"] Winsockコントロールを使用してマルチキャスト通信 - 教えて!goo http://oshiete1.goo.ne.jp/qa2176336.html この辺を見ると自分でがんばるしかないんじゃないでしょうか |
|---|---|
| 回答者:sakusaker7 | |
| 種類:回答 どんな人:経験者 自信:参考意見 |
|
| 回答日時: 08/04/13 14:23 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | 早速の回答ありがとうございます。引用していただいたURLを見ると、Winsockヘッダファイルを参照させて解決していたとのことですが、rubyでも同じようなことができるのでしょうか。 また、IP_ADD_MEMBERSHIPの定義は5か12だろうと思われたので、setsockoptに直接指定してみましたが、 s.setsockopt(Socket::IPPROTO_IP, 5, mreq)とすると以下のエラー 「'setsockopt':getsockoptまたはsetsockoptの呼び出しで指定されたオプションまたはレベルは、不明か、無効か、あるいはサポートされていません。(Errno::ENOPROTOOPT)」、 s.setsockopt(Socket::IPPROTO_IP, 12, mreq)とすると以下のエラー 「'setsockopt':要求したアドレスのコンテキストが無効です。(Errno::EADDRNOTAVAIL)」 となってしまいました。 |