githubページでドキュメントを見つけます
libsocketとlibsocket ++の両方をインストールする場合は、このコマンドを使用するだけです。
$ mkdir build && cd build
$ cmake ..
$ make # or make install
これにより、SOS libsocket.soとlibsocket ++がインストールされます。これらのパスをプロジェクトルートのcmakelists.txtファイルで変更することができます。
Sunosの変更されたライブラリ名に注意してください。ここでは、libsocket_hlと呼ばれます(「高レベル」の場合)。
Cmakeは、オブジェクトライブラリをサポートするために必要です。これは、2.8以上のバージョンの場合です。
Libsocketは、C部品とC ++部品を備えたライブラリであり、ソケットの使用を簡単でクリーンにします。
C部品の使用:
libsocket.soに対するリンクC ++パーツの使用:
libsocket++.soに対するリンクdoc/libsocket++/classes.svg )の重複を減らします。<< 、 >> )オペレーター、 std::stringオブジェクトを受け入れる関数、および多かれ少なかれSTL使用)が含まれます。socketベースクラスのコピーコンストラクターが削除されます。これにより、デストラクタが目に見えるスコープを離れたときにソケットを安全に閉じることができます。一部の関数は、安全な取引を可能にするために、 unique_ptr sを内部的に使用しています。 Libsocket Libraryには次の機能があります。
select(2)およびepoll(7) (c ++)の抽象クラスerrno 、 gai_strerror()などを使用)およびC ++の例外。Libsocketの主な利点の1つは、ソケットを接続し、エラーなどをチェックするための複雑なエラーが発生しやすい手順を作成する必要がないことです。ネットワーク化されたプログラムは短くなり、読みやすくなります。
Libsocketは、TCPとUDPを使用して重要なソケットタイプ:INET/INET6をサポートしています。およびunix dgram/stream。
ソケットを使用して作業するほぼすべての関数は、libsocketによって包まれています。
Libsocketは、「 FILE Typeを使用してLIBCが行うように)を使用しないように設計されています。LibSocketが提供するもの以外の関数を使用して、RAWファイル記述子を操作できる可能性があります。
プラットフォームがサポートされていない場合と同様に、または新しいプラットフォームにLibsocketをポートすることができたかどうかを教えてください。
Libsocketは、最新のLinux Systemsで最適に機能します(ごめんなさい!)。 G ++やClang ++などのC ++ 11コンパイラが必要です。 flag -DCMAKE_CXX_COMPILER=<compiler>または-DCMAKE_C_COMPILER=<compiler>を使用してデフォルトのコンパイラをオーバーライドします。
Linux Systems以外に、Libsocketは、C ++ 11スタックを使用してFreeBSDシステムでも機能することが知られています(実際には完全にテストされていませんが)。ライブラリは、出荷されたコンパイラ(Clang 3.3)を使用して、FreeBSD 10.0-RC4 AMD64システムでテストされています。
Cで書かれたライブラリパーツ(部分的に)Openindianaにもあります。これはSunOS openindiana 5.11 oi_151a8を使用して検証されています。
テスト時に最新のC ++コンパイラは利用できなかったため、C ++ライブラリパーツはSunosシステム上に構築されていません。
もう1つのハードルは、Solarisがすでに標準のソケット機能を含むlibsocketを搭載していることです。したがって、Cライブラリは、SunosのLibsocket_hlに変更されます。 -lsocketではなく、flag -lsocket_hlを使用してプログラムをリンクする必要があります。
examples/echo_dgram_server.c )は、ソケットの作成を拒否します。エラーは「輸送エンドポイントでは操作がサポートされていない」です。examples/transmission_server.c )も、ソケットを作成しようとすると失敗します。ここで、表示されるエラーは「無効な引数」です。これらの問題は、Sunosの少しの調査と知識で修正できると確信しています。Libsocketは、LinuxとFreeBSD/Openindiana-Sunosの間のソースレベルの互換性がいくつかあるため、OpenBSDではまだ動作しません。
他のプラットフォームでLibsocketを正常に使用している場合(または移植されている場合)、お知らせください。
Libsocketをプログラムに静的にリンクすることができます(ソースツリーに.c [pp]および.h [pp]ファイルを配置するか、 .aファイルに対してリンクしています)。 Libsocketは、製品にライセンステキストを含める限り、使用を許可するわずかに変更された2節のBSDライセンスによってライセンスされているため、法的問題を気にする必要はありません(したがって、Libsocketがこのライセンスでライセンスされていることは明らかです)とLibsocketを書いた通知(ライセンスで説明されている)。とにかく、製品のreadmeや広告に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 and libsocket ++)をコンパイルする必要があります(セクション「ビル」を参照)
プログラムをライブラリにリンクすることも簡単です。$オブジェクトがオブジェクトファイルである場合、これらのコマンドのいずれかを使用してそれらをリンクします。
$ gcc -o yourprog -lsocket $OBJECTS
# or for C++
$ g++ -o yourprog -lsocket++ $OBJECTS
libsocket ++は既にLibsocketに対してリンクされているため、C ++を使用している場合でも、1つのライブラリに対してリンクする必要があります。
プログラムをバイナリ形式で配布すると、プログラムと一緒にライブラリバイナリを配布し、プログラムに沿ってインストールすることができます。
Libsocketをテストし、例/および例++で標準のLibsocket Distributionで提供されている例を使用して、いくつかの経験をすることができます。より詳細な説明は、ソースファイルに記載されています。例のコレクションには(とりわけ)が含まれています。
(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 :echo server/clientとしてunixストリームソケットを実証する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 :わずかに異なるアプローチを使用して2つの簡単なHTTPクライアントserver.cpp 、 client.cpp :TCPクライアントとサーバーunix_client_dgram.cpp :unix dgramソケットを使用してsyslogにメッセージを書きますecho_server.cpp, echo_client_conn.cpp, echo_client_sndto.cpp :udp client/server(2つのクライアント:1つはsend()、もう1つは接続されたデータグラムソケットを使用します)unix_client_stream.cpp, unix_server_stream.cpp :unixストリームソケットを使用したクライアント/サーバー。 [clan]g++ -std=c++11 -lsocket++ -o <outfile> <example-name>でこれらを構築します。
コードの長さを確認する必要があります。 http.cは24 SLOC(コードのソースライン)を備えています。