Finden Sie die Dokumente auf Github -Seiten
Wenn Sie sowohl libsocket als auch libocket ++ installieren möchten, verwenden Sie einfach diesen Befehl:
$ mkdir build && cd build
$ cmake ..
$ make # or make install
Dies installiert die SOS libsocket.so und libsocket ++. Also zu/usr/lib/und die Header -Dateien zu/usr/include/libsocket. Sie können diese Pfade in der Datei cmakelists.txt in der Projektstamme ändern.
Beachten Sie den geänderten Bibliotheksnamen auf Sunos, wo er libsocket_hl heißt (für "hohe Ebene").
CMAKE ist erforderlich, um Objektbibliotheken zu unterstützen, was in Versionen höher oder gleich 2,8 der Fall ist.
Libsocket ist eine Bibliothek mit einem C -Teil und einem C ++ - Teil, das die Verwendung von Sockets einfach und sauber macht.
Verwenden des C -Teils:
libsocket.soVerwenden des C ++ - Teils:
libsocket++.sodoc/libsocket++/classes.svg ) Reduzierung der Duplikation.<< , >> ) Operatoren, Funktionen, die std::string Objekte akzeptieren und eine bessere Nutzung ohne oder weniger STL), also-> gute Integration in andere Anwendungen oder Bibliotheken.socket -Basisklasse wird gelöscht. Dies ermöglicht es dem Destruktor, die Steckdose sicher zu schließen, wenn er den sichtbaren Bereich verlässt. Einige Funktionen verwenden intern unique_ptr , um eine sichere Deposition zu ermöglichen. Die Bibliothek libsocket enthält die folgenden Funktionen:
select(2) und epoll(7) (c ++)errno , gai_strerror() usw.) und C ++ - Ausnahmen.Einer der Hauptvorteile von libsocket ist, dass Sie die komplexen und fehleranfälligen Prozeduren für die Verbindung eines Sockets nicht schreiben müssen, um sie selbst auf Fehler usw. zu überprüfen. Ihre vernetzten Programme werden kürzer und besser lesbar.
libsocket unterstützt die wichtigen Socket -Typen: INET/INET6 mit TCP und UDP; und Unix Dgram/Stream.
Fast jede Funktion, die mit Sockets arbeitet, wird von libsocket, z. B.:
Libsocket ist so konzipiert, dass Sie kein "proprietäres" Socket -Format verwenden (wie es LIBC mit seinem FILE tut), um Ihnen die Möglichkeit zu geben, mit anderen Funktionen als von libsocket bereitgestellte Funktionen zu arbeiten.
Bitte lassen Sie mich wissen, ob eine Plattform nicht so gut unterstützt wird, wie sie sollte oder ob Sie es geschafft haben, Libsocket auf eine neue Plattform zu bringen.
Libsocket funktioniert am besten für moderne Linux -Systeme (sorry!). Es braucht einen C ++ 11 -Compiler wie G ++ oder Clang ++. Überschreiben Sie den Standardkompiler mit dem Flag -DCMAKE_CXX_COMPILER=<compiler> oder -DCMAKE_C_COMPILER=<compiler> .
Abgesehen von Linux -Systemen funktioniert Libsocket auch auf FreeBSD -Systemen mit funktionierendem C ++ - 11 -Stack bekannt (obwohl nicht wirklich gründlich getestet). Die Bibliothek wurde auf einem FreeBSD 10.0-RC4 AMD64-System unter Verwendung der versendeten Compiler (clang 3.3) getestet.
Der Bibliotheksteil in C -Werken (teilweise) auch auf Openindiana; Dies wurde unter Verwendung von SunOS openindiana 5.11 oi_151a8 überprüft.
Da zum Zeitpunkt des Tests ein moderner C ++ - Compiler nicht verfügbar war, basiert der C ++ -Bibliotheksteil nicht auf Sunos -Systemen.
Eine weitere Hürde ist, dass Solaris bereits mit einem libsocket , das die Standard -Sockelfunktionen enthält. Die C -Bibliothek wird somit in libsocket_hl auf Sunos umbenannt. Sie müssen Ihre Programme mit der Flag -lsocket_hl verknüpfen, nicht -lsocket .
examples/echo_dgram_server.c ) weigert sich, einen Socket zu erstellen. Der Fehler wird "Betrieb nicht am Transportendpunkt unterstützt".examples/transmission_server.c ) schlägt ebenfalls fehl, wenn versucht wird, den Socket zu erstellen. Hier ist der angezeigte Fehler "ungültiges Argument". Ich bin mir ziemlich sicher, dass diese Probleme mit ein wenig Untersuchung und Kenntnis von Sunos behoben werden können.Libsocket funktioniert noch nicht auf OpenBSD, da es einige fundamentalere Inkompatibilitäten auf Quellenebene gibt als zwischen Linux und FreeBSD/Openindiana-Sunos.
Wenn Sie Libocket erfolgreich auf anderen Plattformen verwenden (oder es sogar portiert), lassen Sie es mich bitte wissen.
Es ist möglich, libocket statisch in Ihr Programm zu verknüpfen (indem die Dateien .c [pp] und .h [pp] in Ihrem Quellbaum platziert oder mit einer .a -Datei verknüpft werden). Sie müssen sich nicht um rechtliche Probleme kümmern, da Libsocket durch eine leicht geänderte 2-Klausel-BSD-Lizenz lizenziert wird, die die Verwendung ermöglicht, solange Sie den Lizenztext in Ihr Produkt aufnehmen (daher ist klar, dass Libsocket durch diese Lizenz lizenziert wird) und die Mitteilung, dass wir Libocket (wie in der Lizenz beschrieben) geschrieben haben. Es ist in Ordnung, Libsocket in den Readme oder Anzeigen Ihres Produkts sowieso zu erwähnen.
Es ist möglich, statische Bibliotheken für die Verknüpfung zu erstellen, indem die Option CMAKE -Konfiguration eingestellt wird. BUILD_STATIC_LIBS=ON . Dies kann aus der Befehlszeile oder in Ihren cmakelists.txt erfolgen.
SET (BUILD_STATIC_LIBS ON ) add_subdirectory(libsocket)
target_link_libraries (MyProject libsocket_int) # C linking
target_link_libraries (MyProject libsocket++_int) # C++ linking
Bitte beachten Sie, dass die CMAKE -Ziele für statische Bibliotheken <libname> _int sind, aber die produzierten Bibliotheken haben die erwarteten libsocket (++). Ein Name auf der Festplatte.
Die empfohlene Methode zur Verwendung von libsocket besteht darin, Ihr Programm mit dem (DLL) (DLL) mit Libsocket zu verknüpfen. Die Verwendung dieser Methode ist ziemlich einfach; Sie müssen die dynamischen Bibliotheken (libsocket und libsocket ++) mit dem Makefile (siehe Abschnitt "Gebäude") kompilieren.
Das Verknüpfen Ihrer Programme mit der Bibliothek ist ebenfalls einfach: Wenn $ Objekte Ihre Objektdateien sind, verlinken Sie sie mit einem dieser Befehle miteinander:
$ gcc -o yourprog -lsocket $OBJECTS
# or for C++
$ g++ -o yourprog -lsocket++ $OBJECTS
Sie müssen nur bei Verwendung von C ++ mit einer Bibliothek verlinken, da libsocket ++ bereits mit libsocket verknüpft ist.
Wenn Sie Ihr Programm in Binärform verteilen, können Sie die Bibliotheksbinärdateien zusammen mit Ihrem Programm verteilen und in Ihrem Programm installieren.
Sie können LiBsocket testen und einige Erfahrungen machen, indem Sie mit den Beispielen in der Standardverteilung von Libsocket in Beispielen/ und Beispielen ++ spielen. Detailliertere Beschreibungen finden Sie in den Quelldateien. Die Sammlung von Beispielen enthält (unter anderem):
(C)
http.c : Ein einfacher HTTP -Clientecho_dgram_server.c , echo_dgram_client.c , echo_dgram_connect_client.c : zeigt, wie udp -Sockets verwendet werden, sowohl im verbundenen als auch im nicht verbundenen Modus.unix_stream_client.c , unix_stream_server.c : Demonstration von UNIX -Stream -Sockets als Echo -Server/Clientunix_dgram_client.c , unix_dgram_server.c : Demonstration von UNIX -DGRAM -Sockets als einfacher Server-/Client -Sendungstext.multicast-listen.c : Nachweis, wie Libinetsocket für Multicast-Netzwerke verwendet wird. Erstellen Sie diese mit gcc -o <outfile> -lsocket <example-name> .
(C ++)
http.cpp , http_2.cpp : Zwei einfache HTTP -Clients verwenden leicht unterschiedliche Ansätzeserver.cpp , client.cpp : TCP -Client und Serverunix_client_dgram.cpp : schreibt eine Nachricht an das Syslog mit UNIX -DGRAM -Socketsecho_server.cpp, echo_client_conn.cpp, echo_client_sndto.cpp : UDP -Client/Server (zwei Clients: eine mit SendTo (), eine andere mit verbundenen Datagramm -Sockeln)unix_client_stream.cpp, unix_server_stream.cpp : Client/Server mit UNIX -Stream -Sockets. Erstellen Sie diese mit [clan]g++ -std=c++11 -lsocket++ -o <outfile> <example-name> .
Sie sollten sich die Länge des Codes ansehen. Während http.c mit 24 SLOC (Quellzeilen von Code) komplett ist-die ganz ähnliche Client-Simple-http (https://github.com/dermesser/simple-http-client) verwendet fast 70 Codezeilen.