Найдите документы на страницах 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 поддерживает важные типы розетков: inet/inet6 с TCP и UDP; и Unix DGRAM/Stream.
Почти каждая функция, работающая с сокеты, обернута либезокетом, например:
LibSocket предназначен для того, чтобы не использовать «запатентованный» формат сокета (как это делает Libc с его типом FILE ), давая вам возможность работать в дескрипторе файла необработанного файла с другими функциями, которые предоставляются Libsocket.
Пожалуйста, дайте мне знать, если платформа не поддерживается так же, как и должна, или вам удалось переносить Libsocket на новую платформу.
Libsocket лучше всего работает в современных системах Linux (извините!). Он нуждается в компиляторе C ++ 11, таком как G ++ или Clang ++. Переопределяйте компилятор по умолчанию, используя флаг -DCMAKE_CXX_COMPILER=<compiler> или -DCMAKE_C_COMPILER=<compiler> .
Кроме того, как известно, что Linux Systems LibSocket также работает (хотя и не совсем тщательно протестирована) в системах FreeBSD с рабочим стеком C ++ 11. Библиотека была протестирована на системе FreeBSD 10.0-RC4 AMD64 с использованием отправленных компиляторов (то есть Clang 3.3).
Библиотека, написанная в C. Works (частично) также на OpenIniana; Это было подтверждено с использованием 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 ) также не удается при попытке создать сокет. Здесь отображаемая ошибка - «неверный аргумент». Я совершенно уверен, что эти проблемы могут быть исправлены с небольшим исследованием и знанием Sunos.LibSocket еще не работает на OpenBSD, потому что существует более фундаментальная несовместимость уровня источника, чем между Linux и FreeBSD/OpenIniana-Sunos.
Если вы успешно используете Libsocket на других платформах (или даже переносили его), пожалуйста, дайте мне знать.
Можно статически связать LibSocket в вашу программу (размещая файлы .c [pp] и .h [pp] в вашем исходном дереве или связываясь против файла .a ). Вам не нужно решать юридические вопросы, потому что Libsocket лицензируется слегка измененной лицензией BSD 2 пункта, которая разрешает любое использование, если вы включаете текст лицензии в свой продукт (поэтому ясно, что LibSocket лицензирован этой лицензией) и уведомление о том, что мы написали 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 для статических библиотек - <ibname> _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 в примерах/ и примерах ++. Более подробные описания можно найти в исходных файлах. Сбор примеров содержат (среди прочего):
(C)
http.c : простой клиент HTTPecho_dgram_server.c , echo_dgram_client.c , echo_dgram_connect_client.c : показывает, как использовать сокеты UDP, как в подключенном, так и в не подключенном режиме.unix_stream_client.c , unix_stream_server.c : демонстрация сокетов Unix Stream в виде Echo Server/Clientunix_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 с помощью Sockets Unix DGRAMecho_server.cpp, echo_client_conn.cpp, echo_client_sndto.cpp : udp client/server (два клиента: один с использованием sendto (), другой, используя подключенные сокеты DataGram)unix_client_stream.cpp, unix_server_stream.cpp : клиент/сервер с использованием Sockets Unix Stream. Создайте их с помощью [clan]g++ -std=c++11 -lsocket++ -o <outfile> <example-name> .
Вы должны взглянуть на длину кода; В то время как http.c завершен с 24 SLOC (исходные строки кода)-довольно похожий клиент Simple-http (https://github.com/dermesser/simple-http-client) использует почти 70 строк кода.