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 | | このエントリーを含むはてなブックマーク

4 Responses to “getservbynameが使えなくなる問題解決!”

  1. 通りすがり2 says:

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

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

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

  2. PukiWiki Plus! (PukiWiki/TrackBack 0.3) says:

    今日のメモ

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

  3. swat says:

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

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

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

  4. says:

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

Leave a Reply

Currently you have JavaScript disabled. In order to post comments, please make sure JavaScript and Cookies are enabled, and reload the page.