• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UNIXでのTCP/IP)

UNIXでのTCP/IP通信プログラムの作成とgethostbyaddr()のエラーについて

このQ&Aのポイント
  • UNIXでのTCP/IP通信プログラムを作成している際に、gethostbyaddr()を使用してホスト名を取得し、printf()を使用して表示したいが、セグメンテーション違反が発生してしまっている。
  • gethostbyaddr()でホスト名を取得する際、エラーが発生し、エラーメッセージが表示される。
  • サーバ側のプログラムでクライアントからの接続を受け付け、gethostbyaddr()でホスト名を取得して表示する処理を行っているが、セグメンテーション違反が発生してしまっている。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

main関数の struct hostent *host; と ResolveAddr関数の struct hostent *host; は別物です ResolveAddrの戻り値をすぐ表示する分には動くかもですが正しい使い方ではないですね 手っ取り早いのは struct hostent *host; をグローバル変数にすると出来ます

rururu32
質問者

お礼

おおっホントだ、できました! 各関数にローカル変数を指定するのとグローバル変数とは別なんですね。 大変参考になりました、どうもありがとうございました!

その他の回答 (1)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

えーと、ResolvAddrでエラーが出るって言ってますか? ざっとコードを眺めた感じで間違ってるのはここですけど。 > ResolveAddr(echoClntAddr.sin_addr.s_addr); > printf("Handling client %s\n", host->h_name); ここが間違いであるという理由は以下の通りです。 ・ResolveAddrはchar *、つまり解決されたホスト名を返すのでそのままprintfに投げればよい ・ここのhostは実体未定義なので確実にメモリアクセスエラーが出る

rururu32
質問者

お礼

回答どうもありがとうございました!

rururu32
質問者

補足

そのままというのはprintf("(略)"), ResolveAddr);ってことですか?

関連するQ&A