2005年11月05日(土)
getservbynameが使えなくなる問題解決!
長い戦いに終止符が打たれました.getservbyname関数が使えない日々がついに終わりました.実に2ヶ月も悩み続けたこの問題.てっきりcygwinがらみじゃないか,と思っていましたが,犯人は意外なところにいました.
まぁ,とにかく,解決方法を見つけたページから.
Q.XP SP2を新規にインストールして、いろいろ触っていたんだが、servicesファイルやnetworksファイルが見えていないらしい。"netstat -a"を叩くと、全部ポート番号で表示されるし、"route add"を叩くと、ネットワークデータベースファイル rt を開けない って言われる。
おぉ,まさに同じ問題っぽい!原因は?解決策は?
なんと,MSN Messenger 7.5の診断ツールが悪かったのか・・・.MSN Messenger 7.5をインストールして,診断ツールを実行すると,
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath
なるレジストリが「REG_SZ型」というものになってしまうとのこと.正しくは「REG_EXPAND_SZ型」.
型の変更はできないみたいなので,修正するには,別のキーを登録しなきゃならない.同レジストリの中身をコピーしておいて,一度削除.その後同じ名前のレジストリを,「展開可能な文字列値」という型で新規作成.レジストリの中身は,先程コピーしておいた,前の中身で.これで完了.
「REG_EXPAND_SZ型」と「展開可能な文字列値」,これは同じ意味らしい.両方同じ表記になってないから,新規作成するとき,一瞬わからなかった・・・.
で,この修正を加えたところ,無事動作!完璧!
先日作った以下のPerlスクリプトと,後輩に作ってもらったWindowsプログラムで,動作確認.
#!/usr/bin/perl -w use strict; my $port; $port = getservbyname('smtp', 'tcp'); print $port;
ちゃんと「25」という結果が得られた・・・.感動・・・.今日は寝よう・・・.
りばにし様、コメントありがとうございました。直りました。(T T)
最初にMSN messenger7.5を抹殺してみましたが、症状変わらず結局レジストリのエントリに正しい型を追加して、その後で変更された間違った変数を削除して、動作を確認しました。自分でもかなり探したり、調べたりしましたが、これはわからないですね・・・。
この症状の気持ち悪さは経験しなければわからないと思います。本当にどうもありがとうございました。
今日のメモ
workgroup kcl フォルダdata IP 192.168.0.1 r8169 driver jumboframe route – default…
ありがとうございまーす(><)
ここ1ヶ月ちょい悩んでましたー。
ご指摘の通りのレジストリに飛び
(バックアップしたのち)
DataBasePath を削除
新規作成=>展開可能な文字列
名前:DataBasePath
値 :%SystemRoot%\System32\drivers\etc
(↑バックスラッシュは¥マーク)
としたところ。ばっつぃしぃでした
ありがとうございます。
ありがとうございます。
ありがとうございます。
ありがとうございます。
僕のSAP LOGONするとき、servicesファイル読み込めないで、
同じの状況だ!ありがとう、僕も一週間ほどよく考えた、こちまで
思わなかった。最高!