在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支持重要的套接字类型:带有TCP和UDP的INET/INET6;和Unix dgram/流。
几乎每个使用插座的功能都由libsocket包裹,例如:
LIBSOCKECT旨在不使用“专有”套接字格式(如LIBC对其FILE类型所做的那样),使您有可能在原始文件描述符上操作具有LibSocket提供的功能以外的功能。
请让我知道是否不应支持平台,或者您设法将libsocket移到了新平台上。
LIBSOCKET在现代Linux系统上最有效(对不起!)。它需要C ++ 11编译器,例如G ++或Clang ++。使用标志-DCMAKE_CXX_COMPILER=<compiler>或-DCMAKE_C_COMPILER=<compiler>覆盖默认编译器。
除Linux Systems以外,LIBSOCKETCENT在使用C ++ 11堆栈的FreeBSD系统上也可以使用LIBSOCKECT(尽管未进行彻底测试)。该库已在FreeBSD 10.0-RC4 AMD64系统上使用已发货编译器(即Clang 3.3)进行了测试。
图书馆的一部分是用C作品(部分)在Openindiana上写的;使用SunOS openindiana 5.11 oi_151a8对此进行了验证。
由于测试时没有现代的C ++编译器,因此C ++库部分不是在Sunos系统上构建的。
另一个障碍是Solaris已经使用包含标准插座功能的libsocket发货。因此,C库将其重命名为Sunos上的libsocket_hl。您必须使用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已获得稍微修改的2条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)链接。使用这种方法非常容易;您必须使用makefile编译动态库(Libsocket和libsocket ++)(请参阅“构建”部分)
将程序链接到库也很简单:如果$对象是您的对象文件,请使用以下命令之一将它们链接在一起:
$ gcc -o yourprog -lsocket $OBJECTS
# or for C++
$ g++ -o yourprog -lsocket++ $OBJECTS
即使使用C ++,您也只需要链接到一个库,因为LIBSOCKECT ++已经链接到LibSocket。
如果您以二进制形式分发程序,则可以将图书馆的二进制文件与您的程序一起分发,并沿您的程序安装。
您可以通过播放示例/示例++中标准LibSocke分布中提供的示例来测试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流插座显示为echo服务器/客户端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 :TCP客户端和服务器unix_client_dgram.cpp :使用unix dgram插座写一条消息echo_server.cpp, echo_client_conn.cpp, echo_client_sndto.cpp :udp client/server(两个客户端:一个使用sendto(),另一个使用连接的datagram sockets)unix_client_stream.cpp, unix_server_stream.cpp :使用unix流插座的客户端/服务器。用[clan]g++ -std=c++11 -lsocket++ -o <outfile> <example-name>构建这些。
您应该看看代码的长度;虽然http.c配备了24个SLOC(代码的源行),但非常相似的客户端Simple-HTTP(https://github.com/dermesser/simple-http-client)使用了近70行代码。