Temukan dokumen di halaman GitHub
Jika Anda ingin menginstal Libsocket dan Libsocket ++, cukup gunakan perintah ini:
$ mkdir build && cd build
$ cmake ..
$ make # or make install
Ini menginstal sos libsocket.so dan libsocket ++. Jadi ke/usr/lib/dan file header ke/usr/include/libsocket. Anda dapat mengubah jalur ini di file cmakelists.txt di root proyek.
Perhatikan nama perpustakaan yang diubah di Sunos, di mana itu disebut libsocket_hl (untuk "level tinggi").
CMake diperlukan untuk mendukung pustaka objek, yang merupakan kasus dalam versi yang lebih tinggi dari atau sama dengan 2,8.
Libsocket adalah perpustakaan dengan bagian C dan soket pembuatan bagian C ++ mudah dan bersih.
Menggunakan bagian C:
libsocket.soMenggunakan bagian C ++:
libsocket++.sodoc/libsocket++/classes.svg ) mengurangi duplikasi.<< , >> ), fungsi menerima objek std::string dan penggunaan STL yang lebih atau kurang), jadi-> integrasi yang baik dalam aplikasi atau perpustakaan lain.socket dihapus; Ini memungkinkan destruktor untuk menutup soket dengan aman ketika meninggalkan ruang lingkup yang terlihat. Beberapa fungsi secara internal menggunakan unique_ptr S untuk mengaktifkan dealokasi yang aman. Perpustakaan Library memiliki fitur -fitur berikut:
select(2) dan epoll(7) (C ++)errno , gai_strerror() dll.) Dan pengecualian C ++.Salah satu keunggulan utama Libsocket adalah Anda tidak perlu menulis prosedur yang kompleks dan rawan kesalahan untuk menghubungkan soket, memeriksanya untuk kesalahan, dll. Sendiri. Program jaringan Anda menjadi lebih pendek dan lebih mudah dibaca.
Libsocket mendukung jenis soket penting: INET/INET6 dengan TCP dan UDP; dan Unix Dgram/Stream.
Hampir setiap fungsi yang bekerja dengan soket dibungkus oleh libsocket, misalnya:
Libsocket dirancang untuk tidak menggunakan format soket "hak milik" (seperti yang dilakukan Libc dengan jenis FILE ) yang memberi Anda kemungkinan untuk beroperasi pada deskriptor file mentah dengan fungsi selain yang disediakan oleh libsocket.
Harap beri tahu saya jika sebuah platform tidak didukung sebaik seharusnya, atau jika Anda berhasil port libsocket ke platform baru.
Libsocket bekerja paling baik pada sistem Linux modern (maaf!). Perlu kompiler C ++ 11 seperti G ++ atau Clang ++. Ganti kompiler default menggunakan flag -DCMAKE_CXX_COMPILER=<compiler> atau -DCMAKE_C_COMPILER=<compiler> .
Selain pada sistem Linux, Libsocket diketahui bekerja dengan baik (meskipun tidak benar -benar diuji secara menyeluruh) pada sistem FreeBSD dengan tumpukan C ++ 11 yang berfungsi. Perpustakaan telah diuji pada sistem FreeBSD 10.0-RC4 AMD64 menggunakan kompiler yang dikirim (yaitu dentang 3.3).
Bagian perpustakaan yang ditulis dalam C Works (sebagian) juga di Openindiana; Ini telah diverifikasi menggunakan SunOS openindiana 5.11 oi_151a8 .
Karena kompiler C ++ modern tidak tersedia pada saat pengujian, bagian perpustakaan C ++ tidak dibangun di atas sistem Sunos.
Rintangan lain adalah bahwa Solaris sudah dikirimkan dengan libsocket yang berisi fungsi soket standar. Perpustakaan C dengan demikian diganti namanya menjadi libsocket_hl di Sunos. Anda harus menautkan program Anda menggunakan flag -lsocket_hl , bukan -lsocket .
examples/echo_dgram_server.c ) menolak untuk membuat soket. Kesalahannya adalah "Operasi yang tidak didukung pada titik akhir transportasi".examples/transmission_server.c ) juga gagal saat mencoba membuat soket. Di sini, kesalahan yang ditampilkan adalah "argumen tidak valid". Saya cukup yakin bahwa masalah ini dapat diperbaiki dengan sedikit investigasi dan pengetahuan tentang Sunos.Libsocket belum bekerja pada OpenBSD karena ada beberapa ketidakcocokan tingkat sumber yang lebih mendasar daripada yang antara Linux dan Freebsd/Openindiana-Sunos.
Jika Anda menggunakan Libsocket dengan sukses di platform lain (atau bahkan porting), beri tahu saya.
Dimungkinkan untuk menautkan libsocket secara statis ke dalam program Anda (dengan menempatkan file .c [pp] dan .h [pp] di pohon sumber Anda atau menautkan terhadap file .a ). Anda tidak perlu keberatan dengan masalah hukum karena Libsocket dilisensikan oleh lisensi BSD 2-Clause yang sedikit dimodifikasi yang memungkinkan penggunaan apa pun, selama Anda memasukkan teks lisensi dalam produk Anda (jadi jelas bahwa Libsocket dilisensikan dengan lisensi ini) dan pemberitahuan bahwa kami menulis Libsocket (seperti yang dijelaskan dalam lisensi). Tidak apa -apa untuk menyebutkan libsocket di readme atau iklan produk Anda.
Dimungkinkan untuk menghasilkan pustaka statis untuk menghubungkan dengan mengatur opsi konfigurasi cmake BUILD_STATIC_LIBS=ON . Ini dapat dilakukan dari baris perintah atau di cmakelists.txt Anda.
SET (BUILD_STATIC_LIBS ON ) add_subdirectory(libsocket)
target_link_libraries (MyProject libsocket_int) # C linking
target_link_libraries (MyProject libsocket++_int) # C++ linking
Harap perhatikan target CMake untuk pustaka statis adalah <libname> _int, tetapi pustaka yang diproduksi akan memiliki libsocket yang diharapkan (++). Nama pada disk.
Metode yang disarankan untuk menggunakan libsocket adalah menautkan program Anda dengan libsocket So (DLL). Menggunakan metode ini cukup mudah; Anda harus mengkompilasi pustaka dinamis (libsocket dan libsocket ++) menggunakan makefile (lihat bagian "bangunan")
Menghubungkan program Anda dengan perpustakaan juga sederhana: Jika $ objek adalah file objek Anda, lalu tautkan bersama menggunakan salah satu perintah ini:
$ gcc -o yourprog -lsocket $OBJECTS
# or for C++
$ g++ -o yourprog -lsocket++ $OBJECTS
Anda hanya perlu menautkan ke satu perpustakaan, bahkan saat menggunakan C ++, karena Libsocket ++ sudah terhubung dengan libsocket.
Jika Anda mendistribusikan program Anda dalam bentuk biner, dimungkinkan untuk mendistribusikan binari perpustakaan bersama dengan program Anda dan menginstalnya di sepanjang program Anda.
Anda dapat menguji libsocket dan membuat beberapa pengalaman dengan bermain dengan contoh yang disediakan dalam distribusi libsocket standar dalam contoh/ dan contoh ++. Deskripsi yang lebih rinci dapat ditemukan di file sumber. Kumpulan contoh berisi (antara lain):
(C)
http.c : klien http sederhanaecho_dgram_server.c , echo_dgram_client.c , echo_dgram_connect_client.c : menunjukkan cara menggunakan soket UDP, baik dalam mode yang terhubung maupun yang tidak terhubung.unix_stream_client.c , unix_stream_server.c : mendemonstrasikan soket aliran unix sebagai server/klien unixunix_dgram_client.c , unix_dgram_server.c : mendemonstrasikan soket unix dgram sebagai server sederhana/teks pengiriman klien.multicast-listen.c : Mendemonstrasikan cara menggunakan libinetsocket untuk jaringan multicast. Bangun ini dengan gcc -o <outfile> -lsocket <example-name> .
(C ++)
http.cpp , http_2.cpp : dua klien http sederhana menggunakan pendekatan yang sedikit berbedaserver.cpp , client.cpp : klien dan server TCPunix_client_dgram.cpp : Menulis pesan ke syslog menggunakan soket DGRAM UNIXecho_server.cpp, echo_client_conn.cpp, echo_client_sndto.cpp : klien/server UDP (dua klien: satu menggunakan sendto (), yang lain menggunakan soket datagram yang terhubung)unix_client_stream.cpp, unix_server_stream.cpp : klien/server menggunakan soket stream unix. Bangun ini dengan [clan]g++ -std=c++11 -lsocket++ -o <outfile> <example-name> .
Anda harus melihat panjang kode; Sementara http.c selesai dengan 24 SLOC (baris sumber kode)-klien yang sangat mirip http (https://github.com/dermesser/simple-http-client) menggunakan hampir 70 baris kode.