ابحث عن مستندات على صفحات جيثب
إذا كنت ترغب في تثبيت كل من 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 أكثر أو أقل) ، SO-> التكامل الجيد في التطبيقات أو المكتبات الأخرى.socket ؛ هذا يمكّن المدمر من إغلاق المقبس بأمان عندما يترك النطاق المرئي. بعض الوظائف تستخدم داخليًا داخليًا لتمكين تمكين التخصيص unique_ptr . تحتوي مكتبة Libsocket على الميزات التالية:
select(2) و epoll(7) (C ++)errno و gai_strerror() وما إلى ذلك) و C ++ استثناءات.واحدة من المزايا الرئيسية لـ Libsocket هي أنه لا يتعين عليك كتابة الإجراءات المعقدة والمعرضة للخطأ لتوصيل مقبس ، والتحقق منه للأخطاء وما إلى ذلك. تصبح برامجك المتصلة بالشبكة أقصر وأفضل قابلة للقراءة.
يدعم Libsocket أنواع المقبس المهمة: inet/inet6 مع TCP و UDP ؛ و UNIX DGRAM/تيار.
يتم لف كل وظيفة تقريبًا مع مآخذ التوصيل بواسطة libsocket ، على سبيل المثال:
تم تصميم Libsocket لعدم استخدام تنسيق المقبس "الملكية" (كما يفعل Libc مع نوع FILE ) مما يتيح لك إمكانية العمل على واصف الملف الخام مع وظائف أخرى غير تلك التي توفرها Libsocket.
واسمحوا لي أن أعرف ما إذا كان النظام الأساسي غير مدعوم وكذلك ينبغي ، أو إذا تمكنت من تنفيذ Libsocket إلى منصة جديدة.
Libsocket يعمل بشكل أفضل على أنظمة Linux الحديثة (آسف!). يحتاج إلى مترجم C ++ 11 مثل G ++ أو Clang ++. تجاوز المترجم الافتراضي باستخدام Flag -DCMAKE_CXX_COMPILER=<compiler> أو -DCMAKE_C_COMPILER=<compiler> .
بخلاف أنظمة Linux ، من المعروف أن Libsocket يعمل أيضًا (على الرغم من أنه لم يتم اختباره تمامًا) على أنظمة FreeBSD مع مكدس C ++ 11. تم اختبار المكتبة على نظام FreeBSD 10.0-RC4 AMD64 باستخدام المترجمين المشحونة (وهو Clang 3.3).
جزء المكتبة المكتوبة في C Works (جزئيًا) أيضًا على OpenIndiana ؛ تم التحقق من ذلك باستخدام SunOS openindiana 5.11 oi_151a8 .
نظرًا لأن برنامج التحويل البرمجي C ++ الحديث لم يكن متاحًا في وقت الاختبار ، فإن جزء مكتبة C ++ غير مبني على أنظمة SunOS.
عقبة أخرى هي أن سولاريس يشحن بالفعل مع libsocket يحتوي على وظائف المقبس القياسية. وبالتالي تتم إعادة تسمية مكتبة C إلى libsocket_hl على sunos. يجب عليك ربط برامجك باستخدام 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 مرخصة من خلال ترخيص 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). باستخدام هذه الطريقة أمر سهل للغاية ؛ يجب عليك تجميع المكتبات الديناميكية (libsocket و libsocket ++) باستخدام Makefile (انظر القسم "بناء")
إن ربط برامجك مقابل المكتبة أمر بسيط أيضًا: إذا كانت كائنات $ هي ملفات الكائن الخاصة بك ، فقم بربطها معًا باستخدام أحد هذه الأوامر:
$ gcc -o yourprog -lsocket $OBJECTS
# or for C++
$ g++ -o yourprog -lsocket++ $OBJECTS
تحتاج فقط إلى الارتباط مع مكتبة واحدة ، حتى عند استخدام C ++ ، لأن Libsocket ++ مرتبط بالفعل مع Libsocket.
إذا قمت بتوزيع برنامجك في شكل ثنائي ، فمن الممكن توزيع ثنائيات المكتبة مع برنامجك وتثبيتها على طول البرنامج.
يمكنك اختبار libsocket وإجراء بعض التجارب من خلال اللعب مع الأمثلة المقدمة في توزيع Libsocket القياسي في الأمثلة/ والأمثلة ++. يمكن العثور على أوصاف أكثر تفصيلاً في الملفات المصدر. تحتوي مجموعة الأمثلة (من بين أمور أخرى):
(ج)
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 كخادم/عميل صدى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 : عميل وخادم TCPunix_client_dgram.cpp : يكتب رسالة إلى syslog باستخدام مآخذ UNIX DGRAMecho_server.cpp, echo_client_conn.cpp, echo_client_sndto.cpp : udp client/server (اثنين من العميل: واحد باستخدام sendto () ، آخر باستخدام مآخذ بيانات connection)unix_client_stream.cpp, unix_server_stream.cpp : العميل/الخادم باستخدام مآخذ دفق UNIX. قم ببناء هذه باستخدام [clan]g++ -std=c++11 -lsocket++ -o <outfile> <example-name> .
يجب أن تلقي نظرة على طول الكود ؛ على الرغم من أن http.c يكتمل مع 24 خطوط SLOC (مصدر رمز)-يستخدم العميل المتشابه تمامًا HTTP (https://github.com/dermesser/simple-http-client) ما يقرب من 70 سطرًا من التعليمات البرمجية.