1

我想知道以前是否做过这样的事情:

我最近开始使用 C 语言开发一个网络库。该库维护一组套接字,每个套接字都与两个 FIFO 字节流、输入和输出相关联。

使用该库的开发人员需要注册一些回调,包括识别器函数和处理函数。如果新数据到达套接字(即输入流),则调用每个识别器。如果其中一个识别器找到数据的匹配部分,则调用其关联的处理程序,使用数据并可能在套接字的输出流上排队新数据,计划稍后传输。

这里有一个例子来说明这个库是如何使用的:

// 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 nettymina库以类似的方式工作,但更面向对象。

于 2011-03-24T21:17:08.280 回答