AnyEventとかCoroあたりを知るために、RemedieのMacのbinary版を入れてみたりしているのですが、1つ気になった点がありました。

RemedieはBonjourをサポートしているので、起動すると自動でSafariのブックマークのBojourメニューに現れます。

remedie-bonjour.jpg

ただ、ここからアクセスすることは出来ませんでした。
Bonjourに登録されたアドレスは、

http://kazeburomp.local.:10010/

Safariからでは接続ができなかったようです。

そこでtelnetを用いて、接続をできるか、確認すると、

% telnet kazeburomp.local. 10010
Trying fe80::21c:42ff:fe00:0...
telnet: connect to address fe80::21c:42ff:fe00:0: Connection refused
Trying fe80::21c:42ff:fe00:0...
telnet: connect to address fe80::21c:42ff:fe00:0: Connection refused
Trying fe80::214:51ff:feed:706b...

ここで止まってしまい、connectできません。
よく見ると、アドレスに見慣れない文字、そうIPv6になってます。
どうやらBonjourに登録されたアドレスは、SafariではIPv6として解決されるようです

MacのIPv6といえば、
高木浩光@自宅の日記 - MacユーザはIPv6を切るかnet.inet6.ip6.use_tempaddr=1の設定を
なんていう話もあるので、あまり有効にしていないかもしれません。
自分も無効にしていたはずなんですが、Parallelsの仮想NICが残ってました。試しにこの仮想NICのIPv6をすべて無効にしたところ、SafariのBonjourメニューから普通にRemedieの画面にアクセスができました。

高木先生の指摘点はありますが、IPv6が有効な状態でBonjourにアクセスできないか調べていたのですが、最も良さげなのはRemedieをIPv6のアドレスでListenさせることではないかと思います。

デフォルトの状態では、IPv4でListenするので、netstatでみると

% netstat -nat|grep 10010
tcp4       0      0  *.10010                *.*                    LISTEN

こんな感じ。tcp4と表示されています。

では、RemedieをIPv6化するにはどうしたらいいかと言うことなのですが、幸いなことに、最新版のRemedieはHTTP::Engine::Interfaceを経由してAnyEventを利用しているので、簡単に対応可能です。

AnyEvent::Socketにその説明がありました。
AnyEvent::Socket - useful IPv4 and IPv6 stuff.
AnyEvent::SocketはIPv6対応がすでにされていて、どうやら、tcp_serverのhostに「::」を渡せばいいようです。

Remedieのサーバを起動するコマンドremedie-server.plのオプションでhostを渡せるのですが、その方法がよくわからなかったので、とりあえず、Remedie::CLI::Serverを直接書き換えました。

% vim /Applications/Remedie\ Server.app/Contents/Resources/lib/Remedie/CLI/Server.pm

この50行目あたりのhostのデフォルトを

-     default     => '0',
+    default     => '::',

と書き換えますします。変更後はRemedie Serverを一度再起動です。

さて、もう一度、netstatで確認すると、

% netstat -nat|grep 10010
tcp46      0      0  *.10010                *.*                    LISTEN

となり、IPv6でListenしているのが確認できます。tcp6ではなく、tcp46なのはすみません勉強不足でよくわかりません。IPv4でも接続ができるモードのようです。

telnetでも確認します

% telnet kazeburomp.local. 10010
Trying fe80::21c:42ff:fe00:0...
Connected to kazeburomp.local.
Escape character is '^]'.

今度は何事もなく、接続できました。
SafariのBonjourメニューからも接続ができました。

remedie-menu.jpg

いやいや、Bonjourアツい。 HTTP::Engine + AnyEventで何か作りたい!

このブログ記事について

このページは、Masahiro Naganoが2009年7月20日 23:08に書いたブログ記事です。

ひとつ前のブログ記事は「VMware ESXiで電力管理を有効にする」です。

次のブログ記事は「livedoorの運用本がでるみたい」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja