在github頁面上找到文檔
如果要同時安裝libsocket和libsocket ++,只需使用此命令:
$ mkdir build && cd build
$ cmake ..
$ make # or make install
這將安裝sos libsocket.so和libsocket ++。因此,到/usr/lib/以及標題文件到/usr/include/libsocket。您可以在cmakelists.txt文件中更改這些路徑。
請注意Sunos上更改的庫名稱,其中稱為Libsocket_hl(“高級”)。
支持對像庫需要CMAKE,這是在高於或等於2.8的版本中。
LibSocket是一個具有C零件和C ++零件的庫,使插座使用易於易於乾淨。
使用C部分:
libsocket.so使用C ++部分:
libsocket++.sodoc/libsocket++/classes.svg )減少重複。<< , >> )運算符,接受std::string對象和更多或更不用的STL使用功能),因此 - >在其他應用程序或庫中進行良好的集成。socket基類的複制構造函數;這使攻擊器在離開可見範圍時可以安全地關閉插座。某些功能在內部使用unique_ptr s來啟用安全的交易。 LibSocket庫具有以下功能:
select(2)和epoll(7) (C ++)的抽像類errno , gai_strerror()等)和C ++例外。LibSocket的主要優點之一是,您不必編寫複雜且容易出錯的過程來連接套接字,對其進行檢查是否錯誤等。您的網絡程序變得更短,更可讀。
LibSocket支持重要的套接字類型:帶有TCP和UDP的INET/INET6;和Unix dgram/流。
幾乎每個使用插座的功能都由libsocket包裹,例如:
LIBSOCKECT旨在不使用“專有”套接字格式(如LIBC對其FILE類型所做的那樣),使您有可能在原始文件描述符上操作具有LibSocket提供的功能以外的功能。
請讓我知道是否不應支持平台,或者您設法將libsocket移到了新平台上。
LIBSOCKET在現代Linux系統上最有效(對不起!)。它需要C ++ 11編譯器,例如G ++或Clang ++。使用標誌-DCMAKE_CXX_COMPILER=<compiler>或-DCMAKE_C_COMPILER=<compiler>覆蓋默認編譯器。
除Linux Systems以外,LIBSOCKETCENT在使用C ++ 11堆棧的FreeBSD系統上也可以使用LIBSOCKECT(儘管未進行徹底測試)。該庫已在FreeBSD 10.0-RC4 AMD64系統上使用已發貨編譯器(即Clang 3.3)進行了測試。
圖書館的一部分是用C作品(部分)在Openindiana上寫的;使用SunOS openindiana 5.11 oi_151a8對此進行了驗證。
由於測試時沒有現代的C ++編譯器,因此C ++庫部分不是在Sunos系統上構建的。
另一個障礙是Solaris已經使用包含標準插座功能的libsocket發貨。因此,C庫將其重命名為Sunos上的libsocket_hl。您必須使用flag -lsocket_hl鏈接程序,而不是-lsocket 。
examples/echo_dgram_server.c )拒絕創建一個套接字。該錯誤是“在運輸端點上不支持操作”。examples/transmission_server.c )也會失敗。在這裡,顯示的錯誤是“無效參數”。我很確定可以通過一些調查和對Sunos的了解來解決這些問題。LibSocket在OpenBSD上尚未起作用,因為與Linux和FreeBSD/Openindiana-Sunos之間的基本來源水平不兼容更多。
如果您在其他平台上成功使用LibSocket(甚至移植了),請告訴我。
可以將libsocket從靜態鏈接到您的程序中(通過將.c [pp]和.h [pp]文件放置在源樹中或針對.a文件鏈接)。您不必介意法律問題,因為LibSocket已獲得稍微修改的2條BSD許可證的許可,該許可允許使用任何用途,只要您在產品中包含許可證文本(因此很明顯,LibSocket已獲得本許可證的許可),並且通知我們寫了LibSocket(如許可證中所述)。可以在您的產品的讀數或廣告中提及Libsocket。
可以通過設置cmake配置選項BUILD_STATIC_LIBS=ON來生成用於鏈接的靜態庫。這可以從命令行或您的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
請注意,靜態庫的cmake目標是<libname> _int,但是生產的庫將具有預期的libsocket(++)。磁盤上的名稱。
使用LibSocket的推薦方法是將您的程序與LibSocket SO(DLL)鏈接。使用這種方法非常容易;您必須使用makefile編譯動態庫(Libsocket和libsocket ++)(請參閱“構建”部分)
將程序鏈接到庫也很簡單:如果$對像是您的對象文件,請使用以下命令之一將它們鏈接在一起:
$ gcc -o yourprog -lsocket $OBJECTS
# or for C++
$ g++ -o yourprog -lsocket++ $OBJECTS
即使使用C ++,您也只需要鏈接到一個庫,因為LIBSOCKECT ++已經鏈接到LibSocket。
如果您以二進制形式分發程序,則可以將圖書館的二進製文件與您的程序一起分發,並沿您的程序安裝。
您可以通過播放示例/示例++中標準LibSocke分佈中提供的示例來測試LibSocket並獲得一些經驗。更詳細的描述可以在源文件中找到。示例的集合包含(除其他):
(C)
http.c :一個簡單的http客戶端echo_dgram_server.c , echo_dgram_client.c , echo_dgram_connect_client.c :顯示如何在連接和未連接模式下使用UDP插座。unix_stream_client.c , unix_stream_server.c :將unix流插座顯示為echo服務器/客戶端unix_dgram_client.c , unix_dgram_server.c :將unix dgram套接字作為簡單服務器/客戶端傳輸文本。multicast-listen.c :演示如何使用libinetsocket進行多播網絡。使用gcc -o <outfile> -lsocket <example-name>構建這些。
(C ++)
http.cpp , http_2.cpp :兩個簡單的http客戶端使用略有不同的方法server.cpp , client.cpp :TCP客戶端和服務器unix_client_dgram.cpp :使用unix dgram插座寫一條消息echo_server.cpp, echo_client_conn.cpp, echo_client_sndto.cpp :udp client/server(兩個客戶端:一個使用sendto(),另一個使用連接的datagram sockets)unix_client_stream.cpp, unix_server_stream.cpp :使用unix流插座的客戶端/服務器。用[clan]g++ -std=c++11 -lsocket++ -o <outfile> <example-name>構建這些。
您應該看看代碼的長度;雖然http.c配備了24個SLOC(代碼的源行),但非常相似的客戶端Simple-HTTP(https://github.com/dermesser/simple-http-client)使用了近70行代碼。