1

是否有任何 C 包装器或库可用于对原始套接字(fd选择、...)进行操作?没有火箭科学,只是一个可读的、漂亮的包装FD_SET等等。

boost::asio用于 C++,所以在这里没用。

我知道Beej 的网络编程指南以及如何对套接字进行操作,我在自己开始包装之前会寻找包装器

有关的

4

3 回答 3

1

看看libdnet。详情: http: //libdnet.sourceforge.net/

于 2012-10-18T13:08:23.157 回答
1

您可能想看看 Dan Kegel(c10k 人)的 rn:http: //www.kegel.com/rn/。它具有围绕多个类似 select 的系统调用(如 poll/epoll/sigio)的普通-old-c 接口。在高 fd 计数时它们之间存在显着的性能差异,并且最好的接口(epoll/kqueue)是不可移植的。

rn api 是 epoll 式的:您只需添加/删除单个 fd,而不是像 select 那样传递整个列表。带有 FD_SET 的良好旧选择在编译时被限制为多个套接字,并在每次调用时将整个列表从用户空间复制到内核空间。使用 epoll,您有单独的系统调用来添加/删除单个 FD,即使您在等待 100K 空闲套接字时也很快。

所有现代 linux 系统都应该支持 epoll。如果您不关心可移植性,您可以直接使用它。

于 2012-10-19T10:33:07.710 回答
1

在 Linux 上,只需使用由标准 GNU libc 库包装的适当系统调用。使用socket(2)获取原始套接字上的 fd,然后使用其他系统调用,如recv(2)poll(2)等。

您可能需要 root 权限才能使用原始套接字。

您应该更喜欢选择已过时poll(2)select(2) 。(阅读有关C10K问题的更多信息)。

另请参见socket(7)packet(7)手册页。

于 2012-10-18T13:02:32.863 回答