1

このようなことが以前に行われたかどうかを知りたい:

私は最近、C でネットワーク ライブラリの作業を開始しました。ライブラリはソケットのセットを維持し、それぞれが 2 つの FIFO バイト ストリーム (入力と出力) に関連付けられています。

ライブラリを使用する開発者は、認識関数とハンドラー関数で構成されるいくつかのコールバックを登録する必要があります。新しいデータがソケット (つまり、入力ストリーム) に到着すると、すべてのレコグナイザーが呼び出されます。レコグナイザーの 1 つがデータの一致する部分を見つけると、関連するハンドラーが呼び出され、データを消費し、場合によってはソケットの出力ストリームに新しいデータをキューに入れ、後で送信するようにスケジュールします。

ライブラリの使用方法を明確にするための例を次に示します。

// create client socket
client = nc_create(NC_CLIENT);

// register some callback functions that you'll have to supply yourself
nc_register_callback(client, &is_login, &on_login);
nc_register_callback(client, &is_password, &on_password);

// connect to server
nc_dial(client, "www.google.com", "23");

// start main loop (we might as well have more than one connection here)
nc_talk();

私にとって、これは C で汎用ネットワーク ライブラリを作成する最も明白な方法です。Google を使用していくつかの調査を行いましたが、C で作成された同様のものを見つけることができませんでした。このアプローチを実装する最初のもの。

このようなデータ駆動型の汎用 C ネットワーク ライブラリは他にありますか?
それらを使用しますか?

4

1 に答える 1

1

同様の API を提供するいくつかのライブラリを次に示します (さまざまなレベルで、たとえば、libevent はソケット/ファイル記述子用の一般的なコールバック駆動型 API を提供します)。

libesmtp ()

libevent

リブカール

Sun/ OncRPC API は、適切なコールバック ハンドラに要求をディスパッチして、ライブラリが面倒な作業を行うという点で、同様のスタイルを持っています。

Java のnettyおよびminaライブラリーは、よりオブジェクト指向ですが、同様の方法で機能します。

于 2011-03-24T21:17:08.280 に答える