ค้นหาเอกสารในหน้า 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 Objects และการใช้ STL ที่มากขึ้นหรือน้อยกว่า) ดังนั้น-> การรวมที่ดีในแอปพลิเคชันหรือไลบรารีอื่น ๆsocket จะถูกลบ; สิ่งนี้ทำให้ผู้ทำลายสามารถปิดซ็อกเก็ตได้อย่างปลอดภัยเมื่อออกจากขอบเขตที่มองเห็นได้ ฟังก์ชั่นบางอย่างใช้ภายในโดยใช้ unique_ptr s เพื่อเปิดใช้งานการจัดการที่ปลอดภัย Libsocket Library มีคุณสมบัติดังต่อไปนี้:
select(2) และ epoll(7) (C ++)errno , gai_strerror() ฯลฯ ) และข้อยกเว้น C ++หนึ่งในข้อได้เปรียบหลักของ Libsocket คือคุณไม่จำเป็นต้องเขียนขั้นตอนที่ซับซ้อนและผิดพลาดได้ง่ายสำหรับการเชื่อมต่อซ็อกเก็ตตรวจสอบข้อผิดพลาด ฯลฯ ด้วยตัวคุณเอง โปรแกรมเครือข่ายของคุณสั้นลงและอ่านได้ดีขึ้น
Libsocket รองรับประเภทซ็อกเก็ตที่สำคัญ: Inet/Inet6 ด้วย TCP และ UDP; และ UNIX DGRAM/Stream
เกือบทุกฟังก์ชั่นที่ทำงานกับซ็อกเก็ตถูกห่อหุ้มด้วย Libsocket เช่น:
Libsocket ได้รับการออกแบบให้ไม่ใช้รูปแบบซ็อกเก็ต "ที่เป็นกรรมสิทธิ์" (ตามที่ LIBC ทำกับประเภท FILE ) ให้ความเป็นไปได้ที่จะทำงานกับตัวอธิบายไฟล์ดิบด้วยฟังก์ชั่นอื่นนอกเหนือจากที่ได้รับจาก Libsocket
โปรดแจ้งให้เราทราบหากแพลตฟอร์มไม่ได้รับการสนับสนุนเช่นเดียวกับที่ควรหรือถ้าคุณจัดการกับพอร์ต libsocket ไปยังแพลตฟอร์มใหม่
Libsocket ทำงานได้ดีที่สุดในระบบ Linux ที่ทันสมัย (ขออภัย!) มันต้องการคอมไพเลอร์ C ++ 11 เช่น G ++ หรือ Clang ++ แทนที่คอมไพเลอร์เริ่มต้นโดยใช้ FLAG -DCMAKE_CXX_COMPILER=<compiler> หรือ -DCMAKE_C_COMPILER=<compiler>
นอกเหนือจาก Linux Systems Libsocket ยังทำงานได้ดี (แม้ว่าจะไม่ได้ทดสอบอย่างละเอียด) ในระบบ FreeBSD ด้วยสแต็ก C ++ 11 ที่ใช้งานได้ ห้องสมุดได้รับการทดสอบในระบบ FreeBSD 10.0-RC4 AMD64 โดยใช้คอมไพเลอร์ที่จัดส่ง (ซึ่งเป็น Clang 3.3)
ส่วนห้องสมุดที่เขียนใน C Works (บางส่วน) ใน OpenIndiana; สิ่งนี้ได้รับการตรวจสอบโดยใช้ SunOS openindiana 5.11 oi_151a8
เนื่องจากคอมไพเลอร์ C ++ ที่ทันสมัยไม่สามารถใช้งานได้ในเวลาที่ทำการทดสอบส่วนห้องสมุด C ++ จึงไม่ได้สร้างขึ้นบนระบบ SUNOS
สิ่งกีดขวางอีกประการหนึ่งคือ Solaris จัดส่งด้วย libsocket ที่มีฟังก์ชั่นซ็อกเก็ตมาตรฐานแล้ว ห้องสมุด C จึงถูกเปลี่ยนชื่อเป็น libsocket_hl บน sunos คุณต้องเชื่อมโยงโปรแกรมของคุณโดยใช้ธง -lsocket_hl ไม่ใช่ -lsocket
examples/echo_dgram_server.c ) ปฏิเสธที่จะสร้างซ็อกเก็ต ข้อผิดพลาดคือ "ไม่รองรับการดำเนินการบนจุดสิ้นสุดการขนส่ง"examples/transmission_server.c ) ก็ล้มเหลวเมื่อพยายามสร้างซ็อกเก็ต ที่นี่ข้อผิดพลาดที่แสดงคือ "อาร์กิวเมนต์ไม่ถูกต้อง" ฉันค่อนข้างแน่ใจว่าปัญหาเหล่านี้สามารถแก้ไขได้ด้วยการตรวจสอบเล็กน้อยและความรู้เกี่ยวกับ SUNOSLibsocket ไม่ทำงานใน OpenBSD แต่มีความเข้ากันไม่ได้ระดับแหล่งที่มาพื้นฐานมากกว่าที่ระหว่าง Linux และ FreeBSD/OpenIndiana-Sunos
หากคุณใช้ libsocket ประสบความสำเร็จบนแพลตฟอร์มอื่น ๆ (หรือแม้กระทั่งพอร์ตมัน) โปรดแจ้งให้เราทราบ
เป็นไปได้ที่จะเชื่อมโยง libsocket แบบคงที่ลงในโปรแกรมของคุณ (โดยวางไฟล์. c [pp] และ. h [pp] ในแผนผังต้นทางของคุณหรือเชื่อมโยงกับไฟล์ .a ) คุณไม่จำเป็นต้องคำนึงถึงปัญหาทางกฎหมายเพราะ Libsocket ได้รับใบอนุญาตโดยใบอนุญาต BSD 2 ข้อที่ได้รับการแก้ไขเล็กน้อยซึ่งอนุญาตให้ใช้งานใด ๆ ตราบใดที่คุณรวมข้อความใบอนุญาตไว้ในผลิตภัณฑ์ของ คุณ (ดังนั้นจึงชัดเจนว่า Libsocket ได้รับใบอนุญาตนี้) ไม่สามารถพูดถึง libsocket ใน readme หรือโฆษณาของผลิตภัณฑ์ของคุณได้
เป็นไปได้ที่จะสร้างไลบรารีแบบคงที่สำหรับการเชื่อมโยงโดยการตั้งค่าตัวเลือกการกำหนดค่า 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 ดังนั้น (DLL) การใช้วิธีนี้ค่อนข้างง่าย คุณต้องรวบรวมไลบรารีแบบไดนามิก (libsocket และ libsocket ++) โดยใช้ makefile (ดูหัวข้อ "อาคาร")
การเชื่อมโยงโปรแกรมของคุณกับไลบรารีนั้นง่ายเช่นกัน: หาก $ Objects เป็นไฟล์วัตถุของคุณจากนั้นเชื่อมโยงเข้าด้วยกันโดยใช้หนึ่งในคำสั่งเหล่านี้:
$ gcc -o yourprog -lsocket $OBJECTS
# or for C++
$ g++ -o yourprog -lsocket++ $OBJECTS
คุณจะต้องเชื่อมโยงกับไลบรารีหนึ่งตัวเท่านั้นแม้ว่าจะใช้ C ++ เนื่องจาก Libsocket ++ เชื่อมโยงกับ libsocket แล้ว
หากคุณแจกจ่ายโปรแกรมของคุณในรูปแบบไบนารีเป็นไปได้ที่จะแจกจ่ายไบนารีห้องสมุดพร้อมกับโปรแกรมของคุณและติดตั้งตามโปรแกรมของคุณ
คุณสามารถทดสอบ libsocket และสร้างประสบการณ์บางอย่างโดยการเล่นกับตัวอย่างที่ให้ไว้ในการกระจาย 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 เป็นเซิร์ฟเวอร์/ไคลเอนต์ Echounix_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 : เขียนข้อความถึง syslog โดยใช้ซ็อกเก็ต Unix dgramecho_server.cpp, echo_client_conn.cpp, echo_client_sndto.cpp : ไคลเอนต์/เซิร์ฟเวอร์ UDP (ไคลเอนunix_client_stream.cpp, unix_server_stream.cpp : ไคลเอนต์/เซิร์ฟเวอร์โดยใช้ซ็อกเก็ตสตรีม Unix สร้างสิ่งเหล่านี้ด้วย [clan]g++ -std=c++11 -lsocket++ -o <outfile> <example-name> >
คุณควรดูความยาวของรหัส ในขณะที่ http.c เสร็จสมบูรณ์ด้วย 24 SLOC (Source Line of Code)-ไคลเอ็นต์ที่ค่อนข้างคล้ายกัน simple-http (https://github.com/dermesser/simple-http-client) ใช้รหัสเกือบ 70 บรรทัด