Trouvez les documents sur les pages GitHub
Si vous souhaitez installer Libsocket et Libsocket ++, utilisez simplement cette commande:
$ mkdir build && cd build
$ cmake ..
$ make # or make install
Cela installe le SOS libsocket.so et libsocket ++. Donc à / usr / lib / et les fichiers d'en-tête vers / usr / include / libsocket. Vous pouvez modifier ces chemins dans le fichier cMakelists.txt dans la racine du projet.
Remarque le nom de bibliothèque modifié sur Sunos, où il s'appelle libsocket_hl (pour "haut niveau").
CMake est nécessaire pour prendre en charge les bibliothèques d'objets, ce qui est le cas dans les versions supérieures ou égales à 2,8.
Libsocket est une bibliothèque avec une pièce C et une partie C ++ rendant l'utilisation des sockets faciles et propres.
Utilisation de la pièce C:
libsocket.soUtilisation de la pièce C ++:
libsocket++.sodoc/libsocket++/classes.svg ) réduisant la duplication.<< , >> ), des fonctions acceptant les objets std::string et une utilisation plus ou moins STL), donc -> bonne intégration dans d'autres applications ou bibliothèques.socket est supprimé; Cela permet au destructeur de fermer en toute sécurité la prise lorsqu'il quitte la portée visible. Certaines fonctions sont en interne à l'aide unique_ptr pour activer la négociation sûre. La bibliothèque Libsocket a les fonctionnalités suivantes:
select(2) et epoll(7) (C ++)errno , gai_strerror() etc.) et les exceptions C ++.L'un des principaux avantages de Libsocket est que vous n'avez pas à rédiger les procédures complexes et sujettes aux erreurs pour connecter une prise, la vérifier pour des erreurs, etc. Vos programmes en réseau deviennent plus courts et plus lisibles.
Libsocket prend en charge les types de socket importants: INET / INET6 avec TCP et UDP; et Unix Dgram / Stream.
Presque toutes les fonctions travaillant avec des sockets sont enveloppées par Libsocket, par exemple:
Libsocket est conçu pour ne pas utiliser un format de prise "propriétaire" (comme le fait LIBC avec son type FILE ) vous offrant la possibilité de fonctionner sur le descripteur de fichiers bruts avec des fonctions autres que celles fournies par Libsocket.
Veuillez me faire savoir si une plate-forme n'est pas prise en charge aussi bien qu'elle le devrait, ou si vous avez réussi à porter Libsocket sur une nouvelle plate-forme.
Libsocket fonctionne mieux sur les systèmes Linux modernes (désolé!). Il a besoin d'un compilateur C ++ 11 comme G ++ ou Clang ++. Remplacez le compilateur par défaut à l'aide de l'indicateur -DCMAKE_CXX_COMPILER=<compiler> ou -DCMAKE_C_COMPILER=<compiler> .
Outre que sur les systèmes Linux, Libsocket est également connu pour fonctionner (bien qu'il ne soit pas vraiment testé) sur les systèmes FreeBSD avec une pile C ++ 11 fonctionnelle. La bibliothèque a été testée sur un système FreeBSD 10.0-RC4 AMD64 à l'aide des compilateurs expédiés (qui est Clang 3.3).
La partie de la bibliothèque écrite en C ouvrages (en partie) également sur OpenIndiana; Cela a été vérifié à l'aide de SunOS openindiana 5.11 oi_151a8 .
Étant donné qu'un compilateur C ++ moderne n'était pas disponible au moment du test, la partie de la bibliothèque C ++ n'est pas construite sur les systèmes SUNOS.
Un autre obstacle est que Solaris est déjà expédié avec un libsocket contenant les fonctions de prise standard. La bibliothèque C est ainsi renommée Libsocket_HL sur Sunos. Vous devez lier vos programmes à l'aide de Flag -lsocket_hl , pas -lsocket .
examples/echo_dgram_server.c ) refuse de créer une prise. L'erreur est "l'opération non prise en charge sur le point de terminaison du transport".examples/transmission_server.c ) échoue également lorsque vous essayez de créer la prise. Ici, l'erreur affichée est "un argument non valide". Je suis sûr que ces problèmes peuvent être résolus avec une petite enquête et une connaissance de Sunos.Libsocket ne fonctionne pas encore sur OpenBSDD car il existe des incompatibilités de niveau de source plus fondamentales que celles entre Linux et FreeBSD / OpenIndiana-Sunos.
Si vous utilisez Libsocket avec succès sur d'autres plates-formes (ou même la portée), veuillez me le faire savoir.
Il est possible de lier Libsocket statiquement dans votre programme (en plaçant les fichiers .c [pp] et .h [pp] dans votre arborescence source ou en liant un fichier .a ). Vous n'avez pas à vous soucier des problèmes juridiques car Libsocket est autorisé par une licence BSD à 2 clause légèrement modifiée qui permet une utilisation, tant que vous incluez le texte de licence dans votre produit (il est donc clair que Libsocket est autorisé par cette licence) et l'avis que nous avons écrit Libsocket (comme décrit dans la licence). Il est normal de mentionner Libsocket dans la lecture ou les publicités de votre produit de toute façon.
Il est possible de produire des bibliothèques statiques pour lier en définissant l'option de configuration CMake BUILD_STATIC_LIBS=ON . Cela peut être fait à partir de la ligne de commande ou dans votre cMakelists.txt.
SET (BUILD_STATIC_LIBS ON ) add_subdirectory(libsocket)
target_link_libraries (MyProject libsocket_int) # C linking
target_link_libraries (MyProject libsocket++_int) # C++ linking
Veuillez noter que les cibles CMake pour les bibliothèques statiques sont <libname> _int, mais les bibliothèques produites auront le libsocket attendu (++). Un nom sur le disque.
La méthode recommandée pour utiliser Libsocket consiste à relier votre programme aux Libsocket SO (DLL). L'utilisation de cette méthode est assez facile; Vous devez compiler les bibliothèques dynamiques (Libsocket et Libsocket ++) en utilisant le makefile (voir la section "Building")
Lier vos programmes à la bibliothèque est également simple: si $ objets sont vos fichiers d'objet, alors liez-les ensemble en utilisant l'une de ces commandes:
$ gcc -o yourprog -lsocket $OBJECTS
# or for C++
$ g++ -o yourprog -lsocket++ $OBJECTS
Il vous suffit de créer un lien avec une seule bibliothèque, même lorsque vous utilisez C ++, car Libsocket ++ est déjà lié à Libsocket.
Si vous distribuez votre programme sous forme binaire, il est possible de distribuer les binaires de la bibliothèque avec votre programme et de les installer le long de votre programme.
Vous pouvez tester Libsocket et faire des expériences en jouant avec les exemples fournis dans la distribution standard de Libsocket en exemples / et exemples ++. Des descriptions plus détaillées peuvent être trouvées dans les fichiers source. La collection d'exemples contient (entre autres):
(C)
http.c : un client http simpleecho_dgram_server.c , echo_dgram_client.c , echo_dgram_connect_client.c : montre comment utiliser les prises UDP, à la fois en mode connecté et non connecté.unix_stream_client.c , unix_stream_server.c : Démonstration des sockets Unix Stream en tant qu'Echo Server / Clientunix_dgram_client.c , unix_dgram_server.c : Démonstration des sockets DGRAM UNIX en tant que simple serveur / client transmettant du texte.multicast-listen.c : démontrant comment utiliser Libinetsocket pour le réseautage de multidiffusion. Les construire avec gcc -o <outfile> -lsocket <example-name> .
(C ++)
http.cpp , http_2.cpp : deux clients http simples utilisant des approches légèrement différentesserver.cpp , client.cpp : client et serveur TCPunix_client_dgram.cpp : écrit un message au syslog à l'aide de sockets Unix dgramecho_server.cpp, echo_client_conn.cpp, echo_client_sndto.cpp : client / serveur UDP (deux clients: l'un utilisant SendTo (), un autre à l'aide de sockets de données connectés)unix_client_stream.cpp, unix_server_stream.cpp : Client / Server à l'aide de sockets Unix Stream. Les construire avec [clan]g++ -std=c++11 -lsocket++ -o <outfile> <example-name> .
Vous devriez jeter un œil à la longueur du code; Alors que http.c est complet avec 24 sloc (lignes source de code) - le client assez similaire Simple-HTP (https://github.com/dermesser/simple-http-client) utilise près de 70 lignes de code.