スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに

インターネットでは、TCP/IPと呼ばれるプロトコルが利用されています。 インターネットで使われるネットワークソフトウェアでは、OS が提供する socket と呼ばれる仕組みを利用しています。

インターネットで通信するときには、いろいろなプロトコルが利用されています。たとえば、ブラウザでグーグルにアクセスするときには、 www.google.com といった名前が利用されています。この名前は、DNSと呼ばれる仕組みで、名前解決が行われ、はじめて、ブラウザは、グーグルのウェブサーバと通信ができます。

今回は、DNS を使わないときに、使うであろう、inet_ptonと呼ばれる関数について説明いたします。ネットワークソフトウァアプログラミングでは、inet_pton()を使用されることがあります。

ソケットプログラミング

ネットワークソフトウェアのクライアントプログラムであれば、以下の手順で、サーバに接続します。

ホスト名から名前解決をして、接続する場合は、以下の流れになります。
1. ソケットの作成
2. 名前解決
3. 接続

IPアドレスを指定して、接続する場合は、以下の流れになります。
1. ソケットの作成
2. IPアドレスのネットワーク構造体への変換
3. 接続

inet_pton は、IPアドレスを指定した場合に使う関数になります。

inet_pton()の役割

inet_pton のプロトタイプは以下の通りです。
int inet_pton(int af, const char * src, void * dst)

inet_pton()関数は、ドット区切りの数値のアドレス (ddd.ddd.ddd.ddd)をネットワーク構造体に変換し、dst にコピーしてくれます。

注意すべきこととして、 ホスト名を渡しても、ホスト名を解決してくれません。たとえば、 www.google.com を渡しても、期待した結果が得られないということになります。名前解決が必要な場合は、 gethostbyname()関数を利用します。

サンプルコード Inet_pton()

以下のサンプルコードは、 inet_pton のラッパー関数です。
int
Inet_pton(int af, const char * src, void * dst)
{
	int r = inet_pton(af, src, dst);
	if (r < 0)
	{
		warn ("can not %s (%s)", __func__, src);
	}
	else if (r == 0)
	{
		warn ("can not %s (%s), invalid src", __func__, src);
	}
	return (r);
}

利用例は以下の通りです。
struct sockaddr_in      servaddr;
if (Inet_pton (AF_INET, "192.168.0.3", & servaddr.sin_addr) != 1) {
	// error
}

inet_ptonの戻り値について

inet_pton()の戻り値は3種類あります。

負の値 afでサポートされていないアドレスファミリを指定した場合
0 srcが指定されたアドレスファミリに対して正しい表記ではない
1 成功した場合

関連

[2008-07-01-1] socketプログラミング struct sockaddr_inのin_addrとは?
[2008-06-16-2] Socketプログラミング gethostbyname()
[2008-06-16-1] Socketプログラミング inet_pton

ソケットプログラミングの書籍を探す



参照しているページ (サイト内): [2008-07-02-1] [2008-06-16-2] [2008-06-16-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー