Encontre os documentos nas páginas do GitHub
Se você deseja instalar o libsocket e o libsocket ++, basta usar este comando:
$ mkdir build && cd build
$ cmake ..
$ make # or make install
Isso instala o SOS Libsocket.SO e Libsocket ++. So para/usr/lib/e os arquivos de cabeçalho para/usr/incluir/libsocket. Você pode alterar esses caminhos no arquivo cmakelists.txt na raiz do projeto.
Observe o nome alterado da biblioteca no Sunos, onde é chamado de libsocket_hl (para "alto nível").
O CMake é necessário para suportar bibliotecas de objetos, o que é o caso em versões superiores ou iguais a 2,8.
O Libsocket é uma biblioteca com uma parte C e uma peça C ++, tornando o uso de soquetes fácil e limpo.
Usando a parte C:
libsocket.soUsando a parte C ++:
libsocket++.sodoc/libsocket++/classes.svg ) reduzindo a duplicação.<< , >> ), funções que aceitam objetos std::string e uso de STL mais ou menos), então-> boa integração em outros aplicativos ou bibliotecas.socket é excluído; Isso permite que o destruidor feche com segurança o soquete quando sai do escopo visível. Algumas funções estão usando internamente o unique_ptr S para permitir a desalocação segura. A biblioteca Libsocket tem os seguintes recursos:
select(2) e epoll(7) (C ++)errno , gai_strerror() etc.) e C ++.Uma das principais vantagens do Libsocket é que você não precisa escrever os procedimentos complexos e propensos a erros para conectar um soquete, verificando-o quanto a erros etc. Seus programas em rede se tornam mais curtos e mais legíveis.
O LibSocket suporta os tipos de soquete importantes: INET/INET6 com TCP e UDP; e unix dgram/stream.
Quase todas as funções que trabalham com soquetes são embrulhadas pelo Libsocket, por exemplo:
O Libsocket foi projetado para não usar um formato de soquete "proprietário" (como o LIBC faz com seu tipo FILE ), oferecendo a possibilidade de operar no descritor de arquivo bruto com funções que não sejam fornecidas pelo Libsocket.
Informe -me se uma plataforma não é suportada tão bem quanto deveria, ou se você conseguiu portar lobsocket para uma nova plataforma.
O Libsocket funciona melhor nos sistemas Linux modernos (desculpe!). Ele precisa de um compilador C ++ 11 como G ++ ou Clang ++. Substitua o compilador padrão usando o sinalizador -DCMAKE_CXX_COMPILER=<compiler> ou -DCMAKE_C_COMPILER=<compiler> .
Além de nos sistemas Linux, também se sabe que o Libsocket funciona (embora não seja realmente muito testado) nos sistemas FreeBSD com a pilha de trabalho C ++ 11. A biblioteca foi testada em um sistema FreeBSD 10.0-RC4 AMD64 usando os compiladores enviados (que é CLANG 3.3).
A parte da biblioteca escrita em C Works (em parte) também em Openindiana; Isso foi verificado usando SunOS openindiana 5.11 oi_151a8 .
Como um compilador C ++ moderno não estava disponível no momento dos testes, a parte da biblioteca C ++ não é construída nos sistemas Sunos.
Outro obstáculo é que o Solaris já é enviado com um libsocket contendo as funções de soquete padrão. A biblioteca C é assim renomeada para libsocket_hl em Sunos. Você precisa vincular seus programas usando o sinalizador -lsocket_hl , não -lsocket .
examples/echo_dgram_server.c ) se recusa a criar um soquete. O erro é "Operação não suportada no terminal de transporte".examples/transmission_server.c ) também falha ao tentar criar o soquete. Aqui, o erro exibido é "argumento inválido". Tenho certeza de que esses problemas podem ser corrigidos com um pouco de investigação e conhecimento do Sunos.O Libsocket ainda não funciona no OpenBSD, porque existem algumas incompatibilidades mais fundamentais de nível de fonte do que as entre Linux e FreeBSD/Openindiana-Sunos.
Se você estiver usando o Libsocket com sucesso em outras plataformas (ou até portaram), entre em contato.
É possível vincular estaticamente o Libsocket ao seu programa (colocando os arquivos .C [pp] e .h [PP] em sua árvore de origem ou vinculando um arquivo .a ). Você não precisa cuidar de questões legais porque o Libsocket é licenciado por uma licença BSD ligeiramente modificada de 2 cláusulas que permite qualquer uso, desde que você inclua o texto da licença em seu produto (para que fique claro que o Libsocket é licenciado por esta licença) e o aviso que escrevemos Libsocket (conforme descrito na licença). Não há problema em mencionar o Libsocket no Readme ou anúncios do seu produto.
É possível produzir bibliotecas estáticas para vincular definindo a opção de configuração do cmake BUILD_STATIC_LIBS=ON . Isso pode ser feito na linha de comando ou nos seus 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
Observe que as metas cmake para bibliotecas estáticas são <libname> _int, mas as bibliotecas produzidas terão o libsocket esperado (++). Um nome no disco.
O método recomendado para usar o libsocket é vincular seu programa contra o Libsocket So (DLL). Usar este método é bastante fácil; Você precisa compilar as bibliotecas dinâmicas (Libsocket e Libsocket ++) usando o Makefile (consulte a seção "Edifício")
Vincular seus programas contra a biblioteca também é simples: se $ objetos são seus arquivos de objetos, vincule -os usando um desses comandos:
$ gcc -o yourprog -lsocket $OBJECTS
# or for C++
$ g++ -o yourprog -lsocket++ $OBJECTS
Você só precisa vincular uma biblioteca, mesmo quando estiver usando C ++, porque o Libsocket ++ já está vinculado ao Libsocket.
Se você distribuir seu programa em formato binário, é possível distribuir os binários da biblioteca junto com seu programa e instalá -los ao longo do seu programa.
Você pode testar o Libsocket e fazer algumas experiências jogando com os exemplos fornecidos na distribuição padrão do LibSocket em exemplos/ e exemplos ++. Descrições mais detalhadas podem ser encontradas nos arquivos de origem. A coleção de exemplos contém (entre outros):
(C)
http.c : um cliente HTTP simplesecho_dgram_server.c , echo_dgram_client.c , echo_dgram_connect_client.c : mostra como usar soquetes UDP, tanto no modo conectado quanto não conectado.unix_stream_client.c , unix_stream_server.c : demonstrando soquetes do UNIX Stream como servidor de eco/clienteunix_dgram_client.c , unix_dgram_server.c : demonstrando soquetes do Unix Dgram como o texto de transmissão de servidor/cliente simples.multicast-listen.c : demonstrando como usar o libinetsocket para redes multicast. Construa -os com gcc -o <outfile> -lsocket <example-name> .
(C ++)
http.cpp , http_2.cpp : dois clientes HTTP simples usando abordagens ligeiramente diferentesserver.cpp , client.cpp : cliente e servidor TCPunix_client_dgram.cpp : grava uma mensagem para o syslog usando soquetes unix dgramecho_server.cpp, echo_client_conn.cpp, echo_client_sndto.cpp : cliente/servidor UDP (dois clientes: um usando sendto (), outro usando soquetes de datagrama conectados)unix_client_stream.cpp, unix_server_stream.cpp : cliente/servidor usando soquetes de fluxo Unix. Construa -os com [clan]g++ -std=c++11 -lsocket++ -o <outfile> <example-name> .
Você deve dar uma olhada no comprimento do código; Enquanto http.c está completo com 24 sloc (linhas de origem de código)-o cliente simples simples http (https://github.com/dermesser/simple-http-client) usa quase 70 linhas de código.