select()を使った送受信プログラム

  概要   プログラム   解説

select()を使ったプログラムの概要

普通、ユーザが使う通信プログラムでは、ユーザからの入力と サーバからの入力の2つの入力があります。これらの両方の入力を いつでも受け付けるようにしたい場合があります。

ユーザからの入力と相手からの入力が交互になされると 決まっていないchatプログラムなどは典型です。この手の プログラムは常に入力があったものから処理したいからです。 自分の入力待ちの時には相手の入力が表示されないのではなく、 自分の入力待ちの状態でも相手の入力がなされたら、すぐに それを表示して欲しいでしょう。

このような入力が複数ある場合に、入力があったものから 処理するためにselect()を使います.ここでは pop3 サーバに接続してpop3プロトコルのコマンドを 入力して結果を表示するプログラムの例を用い, サーバからの入力とユーザからの入力をどのように select()を使って処理するかを説明します。

実行方法

コンパイルしてから実行すると、プログラム中で指定した pop3サーバに接続します。そこでpopのコマンドを入力すると 結果が得られます.

実行例
% cc -o select select.c
% ./select
+OK panda Cyrus POP3 v1.6.24 server ready
user dadpanda
+OK Name is a valid mailbox
pass ********
+OK Maildrop locked and ready
stat
+OK 55 388628
retr 47
+OK Message follows
X-Sieve: cmu-sieve 2.0
Return-Path: 
Received: from panda.fc-lab.com (takeshi@localhost [127.0.0.1])
        by panda.fc-lab.com (8.9.3+3.2W/3.7W-cyrus) with ESMTP id RAA16323
        for ; Mon, 5 Feb 2001 17:25:53 +0900
Date: Mon, 5 Feb 2001 17:25:53 +0900
From: tester
Message-Id: <200102050825.RAA16323@panda.fc-lab.com>
Subject: This is test

これはテストです。届きますか?
.
quit
%

上記の赤く表示されている部分が手で入力した部分です。他の部分は サーバからの応答です。

popプロトコルのコマンドについては 「telnetの使い方 - POPサーバへの接続」のページをご覧ください.

FC Labのホームへ 「ネットワークプログラミング」のページへ