什么是流行的,多平台,免费和开源的套接字库

是否有任何免费的开源库(在C / C ++中)用于广泛使用的套接字,并支持广泛的操作系统(Windows,Unix / Linux,FreeBSD等)。 就像pthreads一样。

否则,剩下的唯一解决方案是为每个操作系统编写套接字包装器。 或者写一个针对winsock和GNU C sys / socket.h库的包装就足够了?

我是不是可以针对GNU C提供的套接字库实现它.GNU C可用于各种平台,我的代码可以在所有这些平台上运行吗?

我相信Apache Portable Runtime和GTK +的GLib库都有套接字API。 由于你的问题被标记为cc++我怀疑你真的想要以C ++为中心的答案,但这两者都是纯粹的C库。

考虑一下提升 ?

QT,如果它对你来说不是太大。 Boost也有一些网络代码。 wxWidgets也为wxNet提供了一个网络库。 另一个lib是Clanlib 。 当然还有SDL

ACE可以帮助你!

本教程概述了ACE OS适配层及其C ++ Socket包装器的设计和使用

用ACE和C ++开发高效便携的通信软件

使用boost :: asio。 非常好的图书馆。 请点击此链接http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio.html

一些链接:
C ++套接字库
C ++套接字库 – ComPP 1.3
SimpleSockets
libmsocket
Komodia TCP / IP库
STLplus C ++库

骨架
硝基++

您可以尝试的另一个选择是Poco 。 Poco还有很多套接字,所以如果你需要其他东西,它也可以提供。

将其与其他工具包进行比较:

  1. Qt有GUI和一些你在Poco中找不到的非常复杂的function,但它要大得多。
  2. Boost在实际function方面没有Poco那么多,但它有像引用包装器,MPL和预处理器这样的库,这些库在其他任何地方都找不到。
  3. 我不太清楚ACE,但我记得它在源代码和组件方面非常大。 ACE似乎用于非常高性能的网络应用程序,因此它可能有点过分。 但话说回来,我不太确定。

只是我的两分钱

是的,你将在Winsock和标准伯克利sockets周围使用一个包装器。 事实上,差异是如此之小,几乎可以直接在代码中使用#ifdef

也就是说,如果你愿意在套接字级别工作。 如果你追求更抽象的东西,那么当然包装它会让你有机会隐藏差异。

尤其是Winsock:

  • 需要您通过在任何其他套接字函数之前调用WSAStartup()来“启动它”
  • 不允许你在套接字上使用普通的旧close(); 你必须使用closesocket()
  • 要求您使用WSAGetLastError()来获取最后一个错误,而不是普通errno

这些是我头顶的三大主要内容,可能会有更多。

如果你想要一个非常轻的,仅限C ++,iostreams式的BSD套接字包装器,你可以考虑使用skstream – 它很简单并且效果很好。 当然,iostreams接口本身还有很多不足之处。 尽管如此,skstream确实包装了select和非常低级别的套接字。

这里只有一个正确的答案。 OpenSSL的。 因为一旦你有套接字代码,你也想要建立SSL连接。 如果您已经在特定的跨平台框架中工作,那么OpenSSL绑定可能已经是可用的。 我认为现在没有太多理由不让SSL / TLS从一开始就启用你的应用程序。