1.2024年度Linux6.9内核最新源码解读-网络篇-【server端】-【第一步】创建--socket
2.史上最详细的源码网络编程实战教程
3.rpcgenRpcgen的部分选项
4.回送地址编译
2024年度Linux6.9内核最新源码解读-网络篇-【server端】-【第一步】创建--socket
深入解析年Linux 6.9内核的网络篇,从服务端的源码第一步:创建socket开始。理解用户空间与内核空间的源码交互至关重要。当我们在用户程序中调用socket(AF_INET,源码 SOCK_STREAM, 0),实际上是源码触发了从用户空间到内核空间的系统调用sys_socket(),这是源码排班模块源码创建网络连接的关键步骤。 首先,源码让我们关注sys_socket函数。源码这个函数在net/socket.c文件的源码位置,无论内核版本如何,源码都会调用__sys_socket_create函数来实际创建套接字,源码它接受地址族、源码类型、源码协议和结果指针。源码创建失败时,源码会返回错误指针。 在socket创建过程中,参数解析至关重要:网络命名空间(net):隔离网络环境,创游皇宫源码每个空间有自己的配置,如IP地址和路由。
协议族(family):如IPv4(AF_INET)或IPv6(AF_INET6)。
套接字类型(type):如流式(SOCK_STREAM)或数据报(SOCK_DGRAM)。
协议(protocol):如TCP(IPPROTO_TCP)或UDP(IPPROTO_UDP),默认值自动选择。
结果指针(res):指向新创建的socket结构体。
内核标志(kern):区分用户空间和内核空间的socket。
__sock_create函数处理创建逻辑,调用sock_map_fd映射文件描述符,支持O_CLOEXEC和O_NONBLOCK选项。每个网络协议族有其特有的create函数,如inet_create处理IPv4 TCP创建。 在内核中,安全模块如LSM会通过security_socket_create进行安全检查。sock_alloc负责内存分配和socket结构初始化,协议族注册和动态加载在必要时进行。芜湖小程序源码RCU机制保护数据一致性,确保在多线程环境中操作的正确性。 理解socket_wq结构体对于异步IO至关重要,它协助socket管理等待队列和通知。例如,在TCP协议族的inet_create函数中,会根据用户请求找到匹配的协议,并设置相关的操作集和数据结构。 通过源码,我们可以看到socket和sock结构体的关系,前者是用户空间操作的抽象,后者是内核处理网络连接的实体。理解这些细节有助于我们更好地编写C++网络程序。 此外,原始套接字(如TCP、UDP和CMP)的应用示例,以及对不同协议的骨骼识别卷积源码深入理解,如常用的IP协议、专用协议和实验性协议,是进一步学习和实践的重要部分。史上最详细的网络编程实战教程
本文通过介绍libhv——一个比libevent、libev、libuv更易用的跨平台国产网络库,旨在提供网络编程实战教程,帮助读者更好地理解TCP/UDP/SSL/HTTP/WebSocket网络编程。libhv提供了带非阻塞IO和定时器的事件循环,适用于开发TCP/UDP/SSL/HTTP/WebSocket客户端/服务端。
项目地址:github.com/ithewei/libhv
码云镜像:gitee.com/libhv/libhv.gitee.com
QQ技术交流群:
libhv博客专栏:hewei.blog.csdn.net/cat
libhv源码分析:blog.csdn.net/qu/ca
libhv教程--目录
libhv是一个跨平台网络库,适用于开发TCP/UDP/SSL/HTTP/WebSocket客户端/服务端。
libhv教程--介绍与体验
libhv是一个高性能事件循环库,寓意High-performance event loop library(高性能事件循环库)。Linux与mac用户可直接执行getting_started.sh脚本体验libhv编写的作为客户端测试。
libhv教程--创建一个简单的TCP客户端
完整TCP/UDP客户端程序参考examples/nc.c,c++版本示例代码见evpp目录下的国外联盟源码TcpClient_test.cpp。
libhv教程--创建一个简单的UDP服务端
以UDP echo server为例,使用libhv创建UDP服务端。编译运行后,可使用nc作为客户端测试。
libhv教程--创建一个简单的UDP客户端
完整TCP/UDP客户端程序参考examples/nc.c,c++版本示例代码见evpp目录下的UdpClient_test.cpp。
libhv教程--创建一个简单的HTTP服务端
以HTTP协议为例,使用libhv创建HTTP服务端。c版本示例代码参考examples/http_server_test.cpp,c++版本示例代码参考evpp目录下的HttpServer_test.cpp。
libhv教程--创建一个简单的HTTP客户端
完整HTTP客户端示例代码参考examples/curl.cpp,模拟实现了curl命令行程序。
libhv教程--创建一个简单的WebSocket服务端
以WebSocket协议为例,使用libhv创建WebSocket服务端。示例代码参考examples/websocket_server_test.cpp。
libhv教程--创建一个简单的WebSocket客户端
WebSocket客户端示例代码参考examples/websocket_client_test.cpp。
libhv教程--实现一个纯C版jsonrpc框架
使用libhv实现一个行内的jsonrpc框架,借助libhv提供的接口hio_set_unpack设置拆包规则,大大节省了处理粘包与分包的成本。
libhv教程--实现一个C++版protorpc框架
实现一个行内的C++版protorpc框架,使用evpp模块+protobuf实现。
创作不易,如果你觉得不错,请在github上star下吧。
rpcgenRpcgen的部分选项
RPCgen 是一个用于生成远程过程调用(RPC)相关的源代码的工具。它提供了多种选项,以便用户根据自己的需求自定义生成的代码。以下是一些主要选项及其功能的简要介绍: -a 选项用于生成所有源程序,包括客户端和服务器端的源代码,这使得用户可以完整地构建整个RPC系统。 -C 选项指定了生成的代码遵循 ANSI C 标准,这对于确保代码在不同编译器之间的兼容性非常有用。 -l 选项生成客户端 stubs,即客户端调用的代理代码,用于与服务器端进行交互。 -m 选项生成服务器 stubs,但不生成 main 函数,用户可以自行添加 main 函数以完成程序启动。 -s 选项结合 -C 和 -s tcp 参数,生成服务器 stubs 和 main 函数,同时使用 TCP 协议,使得代码更加完整。 -h 选项生成头文件,这些文件包含了定义和声明,对于构建过程至关重要。 -Sc 选项生成骨架客户端程序,用户需要手动添加额外的代码以完成客户端的实现。 -Ss 选项生成服务器程序,同样,用户需要手动添加代码以完成服务器端的实现。 使用 Rpcgen -C file.x 命令,可以生成 file_xdr.c、file.h、Makefile.file、file_svc.c 和 file_clnt.c 这五个文件。 若使用 Rpcgen -C -a file.x 命令,除了生成上述五个文件之外,还会额外生成 file_server.c 和 file_client.c 这两个文件,从而提供更加全面的客户端和服务器端源代码。 这些选项的使用使得 RPCgen 成为构建复杂 RPC 系统的有力工具,用户可以根据自己的需求灵活配置生成的代码结构。扩展资料
rpcgen可以自动生成RPC服务器程序的大多数代码,它的输入为一个规格说明文件,它的输出为一个C语言的源程序。规格文件(*.x)包含常量、全局数据类型以及远程过程的声明。Rpcgen产生的代码包含了实现客户机和服务器程序所需要的大部分源代码。他包括参数整理、发送RPC报文、参数和结果的外部数据表示以及本地数据表示的转换等。不过在由rpcgen生成的源文件中,没有过程的具体实现,所以程序员必须要手工编辑这些文件,实现这些过程。
回送地址编译
在Linux终端(foster@syngress ~/book)下,我们执行gcc编译命令对server1.c源代码进行编译,生成可执行文件: gcc -o server1 server1.c 接着,我们运行编译后的程序,但需要提供一个参数,即监听的端口号,如: ./server1 这个命令行表示的是server1是一个基础的TCP服务器,其主要功能是监听指定的端口。服务器首先通过socket()函数创建一个套接字,然后通过bind()函数将套接字绑定到指定端口,并调用accept()函数进入监听状态。在此过程中,服务器会等待客户端的连接请求。 当有客户端连接时,服务器会建立与客户端的TCP连接,随后关闭服务器端套接字,程序运行至此结束。扩展资料
回送地址(.x.x.x)是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回之,从进行任何网络传输。