Linuxネットワークプログラミング

Linuxネットワークプログラミングの本を書きました(2010年2月)

ここでは、Linuxを使ったネットワークプログラミングの説明を行いたいと思います。 ここで対象としている読者は、ネットワークプログラミング初心者(もしくは入門者)かつLinux環境でプログラミングを行いたい人です。

開発環境としては、C言語+gccを想定しています。 説明内容は主にソケットプログラミングになります。

  • なお、C言語そのものが初めての方は「C言語入門」も参考にどうぞ。Windows専用には書いてませんが主にC言語で共通の部分を解説しています。

コードを書く前の準備

まず、gccを使える状態にしないといけません。 ディストリビューションにもよりますが、Linuxを普通にインストールしただけでは開発環境は入りません。 開発環境を用意するためには、gccやglibcなどのrpmを必要に応じてインストールしてください。

次に、エディタが必要になります。 mule、emacs、xemacsなどを利用するのが良いかも知れません。 個人的にはviが好きです。

実際にプログラミング

では、実際にネットワークを使って通信を行うコードを書きながら説明をしていきたいと思います。 以下には、Linuxに限定しないネットワーク自体に関する説明も一部含まれます。

はじめに

サンプルコード利用方法

Linuxネットワークプログラミング全般

socketの作成

エラー内容の取得

TCP

TCPを使う

TCPを使う(サーバ)

TCPを使う(サーバ、エラー処理付き)

TCPを使う(acceptした相手の確認)

TCPを使う(サーバ、SO_REUSEADDR)

HTTPサーバの作成(TCPサーバサンプル)

TCPを使う(クライアント、inet_addr、gethostbyname)

TCPを使う(クライアント、gethostbyname)

TCPを使う(クライアント、エラー処理付き)

HTTPクライアントの作成(TCPクライアントサンプル)

UDP

UDPを使う

UDPでブロードキャストを使う

UDPでマルチキャストを使う(マルチキャストを送信する)

UDPでマルチキャストを使う(マルチキャストを受信する)

UDPでマルチキャストを使う(TTLを設定する)

その他

IPアドレスからホスト名への変換(gethostbyaddr)

selectの利用

selectの利用(タイムアウト付き)

selectを横から止める方法

pselectでシグナルを無視する

ノンブロッキング設定

簡単なpingの作成(ICMPの送受信)

ネットワーク情報の取得

ネットワークインターフェース情報一覧を取得する(getifaddrs)

ネットワークインターフェース一覧を取得

インターフェースのIPアドレスを取得

インターフェースのネットマスクを取得

インターフェースのMACアドレスを取得

ネットワーク情報の設定

インターフェースにIPv6アドレスを追加

インターフェースからIPv6アドレスを削除

インターフェースのIPアドレスを設定する

インターフェースのネットマスクを設定する

インターフェースをdown状態にする

インターフェースをup状態にする

インターフェースのMACアドレスを設定する

インターフェースのMACアドレスを設定する(2)

IPv6

getaddrinfo(単純な例)

getaddrinfo(エラー処理)

getaddrinfo(getaddrinfoを使ってsockaddrを作成する)

getaddrinfo(一番使いそうな例)

関連情報

インターネット入門(基礎技術)
インターネットの仕組みを初心者向けに説明しています。
Windowsネットワークプログラミング
Linuxではなく、Windowsでネットワークプログラミングを行いたい方はこちらをご覧ください。
Perlネットワークプログラミング
Perlによるネットワークプログラミング解説です。