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」という結果が得られた・・・.感動・・・.今日は寝よう・・・.

2005年11月05日02時36分 | Permalink
Trackback
Trackback URL
Comment

りばにし様、コメントありがとうございました。直りました。(T T)

最初にMSN messenger7.5を抹殺してみましたが、症状変わらず結局レジストリのエントリに正しい型を追加して、その後で変更された間違った変数を削除して、動作を確認しました。自分でもかなり探したり、調べたりしましたが、これはわからないですね・・・。

この症状の気持ち悪さは経験しなければわからないと思います。本当にどうもありがとうございました。

通りすがり2 at 2005年11月05日07時10分

今日のメモ

workgroup kcl フォルダdata IP 192.168.0.1 r8169 driver jumboframe route – default…

PukiWiki Plus! (PukiWiki/TrackBack 0.3) at 2005年11月19日11時48分

ありがとうございまーす(><)
ここ1ヶ月ちょい悩んでましたー。

ご指摘の通りのレジストリに飛び
(バックアップしたのち)
DataBasePath を削除
新規作成=>展開可能な文字列
名前:DataBasePath
値 :%SystemRoot%\System32\drivers\etc
    (↑バックスラッシュは¥マーク)
としたところ。ばっつぃしぃでした

ありがとうございます。
ありがとうございます。
ありがとうございます。
ありがとうございます。

swat at 2005年11月25日16時06分

僕のSAP LOGONするとき、servicesファイル読み込めないで、
同じの状況だ!ありがとう、僕も一週間ほどよく考えた、こちまで
思わなかった。最高!

崔 at 2006年11月22日11時39分
Comment Form