Encuentra los documentos en las páginas de Github
Si desea instalar Libsocket y Libsocket ++, simplemente use este comando:
$ mkdir build && cd build
$ cmake ..
$ make # or make install
Esto instala el SOS Libsocket.so y Libsocket ++. Entonces, a/usr/lib/y los archivos de encabezado a/usr/include/libsocket. Puede cambiar estas rutas en el archivo cmakelists.txt en la raíz del proyecto.
Tenga en cuenta el nombre de la biblioteca cambiado en Sunos, donde se llama libsocket_hl (para "alto nivel").
Se requiere CMAKE para admitir bibliotecas de objetos, que es el caso en versiones superiores o igual a 2.8.
Libsocket es una biblioteca con una parte C y una parte C ++ que hace que el uso de enchufes sea fácil y limpio.
Usando la parte C:
libsocket.soUsando la parte C ++:
libsocket++.sodoc/libsocket++/classes.svg ) reduciendo la duplicación.<< , >> ), funciones que aceptan objetos std::string y uso de STL más o menos), así que-> buena integración en otras aplicaciones o bibliotecas.socket ; Esto permite al destructor cerrar de manera segura el enchufe cuando deja el alcance visible. Algunas funciones utilizan internamente unique_ptr S para habilitar la desasignación segura. La biblioteca Libsocket tiene las siguientes características:
select(2) y epoll(7) (C ++)errno , gai_strerror() etc.) y excepciones de C ++.Una de las principales ventajas de Libsocket es que no tiene que escribir los procedimientos complejos y propensos a errores para conectar un socket, verificarlo en busca de errores, etc. Sus programas en red se vuelven más cortos y mejor legibles.
Libsocket admite los tipos de socket importantes: INET/INET6 con TCP y UDP; y Unix Dgram/Stream.
Casi todas las funciones que trabajan con enchufes están envueltas por Libsocket, por ejemplo:
Libsocket está diseñado para no usar un formato de socket "patentado" (como lo hace LibC con su tipo de FILE ) que le brinda la posibilidad de operar en el descriptor de archivos sin procesar con funciones distintas a las proporcionadas por Libsocket.
Por favor, avíseme si una plataforma no es compatible como debería, o si logró puerto Libsocket a una nueva plataforma.
Libsocket funciona mejor en los sistemas modernos de Linux (¡lo siento!). Necesita un compilador C ++ 11 como G ++ o Clang ++. Anule el compilador predeterminado usando el flag -DCMAKE_CXX_COMPILER=<compiler> o -DCMAKE_C_COMPILER=<compiler> .
Aparte de los sistemas Linux, Libsocket se sabe que también funciona (aunque no es realmente probado por completo) en los sistemas FreeBSD con la pila C ++ 11 de trabajo. La biblioteca se ha probado en un sistema FreeBSD 10.0-RC4 AMD64 utilizando los compiladores enviados (que es Clang 3.3).
La parte de la biblioteca escrita en C Works (en parte) también en OpenIndiana; Esto se ha verificado utilizando SunOS openindiana 5.11 oi_151a8 .
Debido a que un compilador moderno de C ++ no estaba disponible en el momento de la prueba, la parte de la biblioteca C ++ no está construida en los sistemas Sunos.
Otro obstáculo es que Solaris ya se envía con un libsocket que contiene las funciones estándar del enchufe. La biblioteca C se renombra a Libsocket_hl en Sunos. Debe vincular sus programas usando el flag -lsocket_hl , no -lsocket .
examples/echo_dgram_server.c ) se niega a crear un socket. El error es "operación no admitida en el punto final de transporte".examples/transmission_server.c ) también falla al intentar crear el socket. Aquí, el error que se muestra es "argumento no válido". Estoy bastante seguro de que estos problemas se pueden solucionar con un poco de investigación y conocimiento de Sunos.Libsocket aún no funciona en OpenBSD porque hay algunas incompatibilidades de nivel de fuente más fundamentales que las entre Linux y FreeBSD/OpenIndiana-Sunos.
Si está utilizando Libsocket con éxito en otras plataformas (o incluso lo portó), hágamelo saber.
Es posible vincular Libsocket estáticamente en su programa (colocando los archivos .C [PP] y .H [PP] en su árbol de origen o vinculando con un archivo .a ). No tiene que preocuparse por los problemas legales porque Libsocket tiene licencia por una licencia BSD de 2 cláusula ligeramente modificada que permite cualquier uso, siempre que incluya el texto de la licencia en su producto (por lo que está claro que Libsocket tiene licencia por esta licencia) y el aviso de que escribimos Libsocket (como se describe en la licencia). Está bien mencionar Libsocket en el readme o anuncios de su producto de todos modos.
Es posible producir bibliotecas estáticas para vincular configurando la opción de configuración de CMake BUILD_STATIC_LIBS=ON . Esto se puede hacer desde la línea de comandos o en su 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
Tenga en cuenta que los objetivos CMake para bibliotecas estáticas son <libname> _int, pero las bibliotecas producidas tendrán el Libsocket esperado (++). Un nombre en el disco.
El método recomendado para usar Libsocket es vincular su programa con el Libsocket So (DLL). Usar este método es bastante fácil; Debe compilar las bibliotecas dinámicas (Libsocket y Libsocket ++) utilizando el makfile (consulte la sección "Edificio")
Vincular sus programas con la biblioteca también es simple: si $ objetos son sus archivos de objetos, luego enlacelos usando uno de estos comandos:
$ gcc -o yourprog -lsocket $OBJECTS
# or for C++
$ g++ -o yourprog -lsocket++ $OBJECTS
Solo necesita vincularse contra una biblioteca, incluso cuando se usa C ++, porque Libsocket ++ ya está vinculado contra Libsocket.
Si distribuye su programa en forma binaria, es posible distribuir los binarios de la biblioteca junto con su programa e instalarlos a lo largo de su programa.
Puede probar LibsSocket y hacer algunas experiencias jugando con los ejemplos proporcionados en la distribución estándar de Libsocket en ejemplos/ y ejemplos ++. Se pueden encontrar descripciones más detalladas en los archivos de origen. La colección de ejemplos contiene (entre otros):
(DO)
http.c : un cliente HTTP simpleecho_dgram_server.c , echo_dgram_client.c , echo_dgram_connect_client.c : muestra cómo usar enchufes UDP, tanto en modo conectado como no conectado.unix_stream_client.c , unix_stream_server.c : demostrando los sockets de transmisión UNIX como echo servidor/clienteunix_dgram_client.c , unix_dgram_server.c : demostrando los sockets Dgram unix como texto de transmisión de servidor/cliente simple.multicast-listen.c : demostrando cómo usar libinetsocket para redes de multidifusión. Construya estos con gcc -o <outfile> -lsocket <example-name> .
(C ++)
http.cpp , http_2.cpp : dos clientes HTTP simples utilizando enfoques ligeramente diferentesserver.cpp , client.cpp : cliente y servidor TCPunix_client_dgram.cpp : escribe un mensaje en el syslog usando los sockets Dgram Unixecho_server.cpp, echo_client_conn.cpp, echo_client_sndto.cpp : cliente/servidor UDP (dos clientes: uno usando sendto (), otro usando los enchufes de datagrama conectados)unix_client_stream.cpp, unix_server_stream.cpp : cliente/servidor usando sockets de transmisión Unix. Construya estos con [clan]g++ -std=c++11 -lsocket++ -o <outfile> <example-name> .
Debe echar un vistazo a la longitud del código; Mientras que http.c se completa con 24 SLOC (líneas de código fuente), el cliente bastante similar Simple-HTTP (https://github.com/dermesser/simple-http-client) usa casi 70 líneas de código.