08/07/29 02:56:15 0 BE:2188883-DIA(100513)
>>573
確かに、
URLリンク(bg20.2ch.net)
はできるのに、
URLリンク(bg20.2ch.net)
は、短パンマンになりますね。
600:root▲▲ ★
08/07/29 03:08:36 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 は、そういうつくりになっていない模様。
601:root▲▲ ★
08/07/29 03:09:03 0 BE:5746379-DIA(100513)
プログラム側でこの状況をうまく回避できないか、少し見てみます。
602:root▲▲ ★
08/07/29 03:11:30 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. */
ふうむ、、、。
603:root▲▲ ★
08/07/29 03:14:08 0 BE:6566898-DIA(100513)
URLリンク(bg20.2ch.net)
できたっぽい。
604:root▲▲ ★
08/07/29 03:15:35 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 も同じことしてきます。
605:root▲▲ ★
08/07/29 03:16:57 0 BE:365322-DIA(100513)
URLリンク(bg20.2ch.net)
できた。
606:root▲▲ ★
08/07/29 03:18:42 0 BE:1276872-DIA(100513)
同じことを bg21 bg22 bg23 でもやればいいのか。
いってきます。
607:root▲▲ ★
08/07/29 03:20:29 0 BE:1459744-DIA(100513)
・・・この部分はたぶん、SunOS さんが昔書いて板で公開した、、、。ところでしたっけか。
こんな場合、どうするのがプログラムマナー的にはいいんだろう。
AF_UNSPEC を試してだめだったらエラーコード見て、
それからプロトコル別にやってみる、とかがいいんだろうか。
608:root▲▲ ★
08/07/29 03:26:44 0 BE:4377986-DIA(100513)
bg21 bg22 bg23 の p.i r.i にも同じ変更を入れた。
609:root▲▲ ★
08/07/29 03:31:07 0 BE:3192757-DIA(100513)
で、ipv6以外の 2ch のサーバは外向けはIPv4しか今のところ、持っていないので、
影響は出ないはずです。
しかし、この修正はいまいちですね。
将来に禍根を残しそうな感じ。
たぶん、もっといいコーディング方法がある気がします。
あと、FreeBSD 7.0R では APR_UNSPEC の際の動作が改良されているようなので、
7.0R に上げるまでは、とりあえずこれでいくか、
あるいはソースレベルで改良するのがいい、ということで。