■ V6板作ろう。 まだまだ現役です。

このエントリーをはてなブックマークに追加
599root▲▲ ★
>>573
確かに、

http://bg20.2ch.net/test/p.so/qb5.2ch.net/operate/

はできるのに、

http://bg20.2ch.net/test/p.so/ipv6.2ch.net/ipv6/

は、短パンマンになりますね。
600root▲▲ ★:2008/07/29(火) 03:08:36 ID:???0 BE:1641863-DIA(100513)
>>599
エラーコード 5656 を手がかりに、bg20 を少し見てみました。
結果、原因ぽいものがわかりますた。

・bg20 は「IPv6あり」のカーネル(FreeBSDのデフォルト設定)でシステムが作られている
・しかし、外につながるインタフェースにはIPv6アドレスがついていない

この状況の場合、*6.2Rまでの*FreeBSDだと、
*IPv6で優先的につなぎにいって*、経路がないよエラーになるようです。
(7.0RからはIPv4を先に試すようです)

システム標準の telnet とかでは以下のように、
IPv4に自動的にフォールバックしてつながるのですが、

%telnet ipv6.2ch.net 80
Trying 2407:3000:6:175::12...
telnet: connect to address 2407:3000:6:175::12: No route to host
Trying 125.6.175.12...
Connected to ipv6.2ch.net.
Escape character is '^]'.

どうも、p.so は、そういうつくりになっていない模様。
601root▲▲ ★:2008/07/29(火) 03:09:03 ID:???0 BE:5746379-DIA(100513)
プログラム側でこの状況をうまく回避できないか、少し見てみます。
602root▲▲ ★:2008/07/29(火) 03:11:30 ID:???0 BE:1460328-DIA(100513)
/* Make sure we have IPV6 support first before giving apr_sockaddr_info_get
APR_UNSPEC, because it may give us back an IPV6 address even if we can't
create IPV6 sockets. */

ふうむ、、、。
603root▲▲ ★:2008/07/29(火) 03:14:08 ID:???0 BE:6566898-DIA(100513)
604root▲▲ ★:2008/07/29(火) 03:15:35 ID:???0 BE:4469377-DIA(100513)
- if (apr_sockaddr_info_get(&sockaddr, host, APR_UNSPEC, 80, 0, pool)
+ if (apr_sockaddr_info_get(&sockaddr, host, APR_INET, 80, 0, pool)

これでできたけど、
この解決方法はちょっと、負けっぽいなぁ。

(IPv4を明示的に指定して回避)

でも今はとりあえず、これで動かすことにするか、、、。
r.so も同じことしてきます。
605root▲▲ ★:2008/07/29(火) 03:16:57 ID:???0 BE:365322-DIA(100513)
606root▲▲ ★:2008/07/29(火) 03:18:42 ID:???0 BE:1276872-DIA(100513)
同じことを bg21 bg22 bg23 でもやればいいのか。

いってきます。
607root▲▲ ★:2008/07/29(火) 03:20:29 ID:???0 BE:1459744-DIA(100513)
・・・この部分はたぶん、SunOS さんが昔書いて板で公開した、、、。ところでしたっけか。

こんな場合、どうするのがプログラムマナー的にはいいんだろう。

AF_UNSPEC を試してだめだったらエラーコード見て、
それからプロトコル別にやってみる、とかがいいんだろうか。
608root▲▲ ★:2008/07/29(火) 03:26:44 ID:???0 BE:4377986-DIA(100513)
bg21 bg22 bg23 の p.i r.i にも同じ変更を入れた。