套接字:“fd”和“select”操作的任何库或包装器?

时间:2012-10-18 12:57:25

标签: c sockets networking

是否有任何C包装器或库用于原始套接字上的操作(fdselect,...)?没有火箭科学,只是一个可读的,好的包装FD_SET等。

boost::asio适用于C ++,因此无用。

我知道Beej's guide to network programming以及如何操作套接字,我自己开始包装之前先寻找包装器

相关

3 个答案:

答案 0 :(得分:1)

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

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

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

另见socket(7)& packet(7)手册页。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你可能想看看Dan Kegel(c10k家伙):http://www.kegel.com/rn/。它有多个类似选择的系统调用的简单-c-c接口,例如poll / epoll / sigio。在高fd计数和最佳接口(epoll / kqueue)之间存在显着的性能差异是不可移植的。

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

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