Qu’est-ce qu’une bibliothèque de sockets populaire, multi-plateforme, gratuite et à source ouverte?

Existe-t-il une bibliothèque libre open source (en C / C ++) pour les sockets largement utilisée et prenant en charge un large éventail de systèmes d’exploitation (Windows, Unix / Linux, FreeBSD, etc.). Tout comme les pthreads.

Sinon, la seule solution possible serait d’écrire le wrapper de socket pour chaque système d’exploitation. Ou alors, écrire un wrapper contre les bibliothèques WinSock et GNU C sys / socket.h serait suffisant?

Ne pourrais-je pas l’implémenter avec la bibliothèque de sockets fournie avec GNU C. GNU C est disponible pour une large gamme de plates-formes et mon code fonctionnera sur toutes ces plates-formes?

Je crois que le Apache Portable Runtime et les bibliothèques GLib de GTK + ont des API de socket. Étant donné que votre question porte les balises c et c++ je suppose que vous voulez vraiment des réponses centrées sur le C ++, mais ces deux solutions valent bien que des bibliothèques en C pur.

Pensez à regarder boost ?

QT si ce n’est pas trop grand pour vous. Boost a aussi un code de réseau. wxWidgets a également avec wxNet une bibliothèque réseau. Une autre bibliothèque est Clanlib . Et bien sûr, SDL

ACE peut vous aider!

Ce tutoriel fournit une vue d’ensemble de la couche d’adaptation du système d’exploitation ACE, ainsi que de la conception et de l’utilisation de ses wrappers C ++ Socket.

Développement d’un logiciel de communication portable et efficace avec ACE et C ++

Utilisez boost :: asio. Très bonne bibliothèque. Suivez ce lien http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio.html

Quelques liens pour vous:
Bibliothèque de sockets C ++
Bibliothèque de sockets C ++ – ComPP 1.3
SimpleSockets
libmsocket
Bibliothèque Komodia TCP / IP
Bibliothèque STLplus C ++

Cadre
nitro ++

Une autre option que vous pouvez essayer est Poco . Poco a beaucoup plus que des sockets, donc si vous avez besoin d’autres choses, il peut également vous les fournir.

En le comparant à d’autres boîtes à outils:

  1. Qt a une interface graphique et des fonctionnalités très sophistiquées que vous ne trouverez pas dans Poco, mais elles sont bien plus grandes.
  2. Boost n’a pas autant de fonctionnalités que Poco, mais il possède des bibliothèques telles que les wrappers de référence, MPL et préprocesseur qui ne peuvent être trouvées nulle part ailleurs.
  3. Je ne me souviens pas très bien d’ACE, mais je me souviens que c’était très très gros en termes de code source et de composants. ACE semble être utilisé pour les applications réseau à très hautes performances, il est donc peut-être excessif. Mais là encore, je ne suis pas trop sûr.

Juste mes deux cents

Oui, vous irez très loin avec un wrapper autour de Winsock et des sockets Berkeley standard. En fait, les différences sont si petites qu’il est presque possible de le faire avec #ifdef directement dans le code.

Autrement dit, si vous êtes prêt à travailler au niveau du socket. Si vous recherchez quelque chose de plus abstrait, alors bien sûr, cela vous donne une bonne occasion de cacher les différences.

En particulier, Winsock:

  • Vous devez “démarrer” en appelant WSAStartup() avant toute autre fonction de socket
  • Ne vous permet pas d’utiliser plain old close () sur un socket; vous devez utiliser closesocket()
  • Vous devez utiliser WSAGetLastError() pour obtenir la dernière erreur, et non une erreur errno .

Ce sont les trois plus importants de ma tête, il y en a peut-être plus.

Si vous souhaitez utiliser un wrapper très léger, en C ++ uniquement, de style iostreams autour des sockets BSD, vous pouvez envisager skstream : il est simple et fonctionne bien. Bien entendu, l’interface iostreams elle-même laisse beaucoup à désirer. skstream encapsule select et le socket de très bas niveau vous traite assez bien.

Il n’y a qu’une seule bonne réponse ici. OpenSSL. Car une fois que vous avez le code de socket, vous allez aussi vouloir établir des connexions SSL. Si vous travaillez déjà dans un cadre multi-plateformes particulier, les liaisons OpenSSL peuvent déjà être disponibles. Je ne pense pas qu’il y ait beaucoup d’excuses maintenant pour que SSL / TLS ne permette pas à votre application de commencer.