C语言多进程TCP服务器示例:epoll与Fork并发架构

栗子
栗子
发布时间:2026-10-14| 6人浏览过
原创

本文提供了一个完整的C语言多进程TCP服务器示例代码。通过结合epoll IO多路复用技术与fork()多进程机制,实现高效的并发处理能力。代码涵盖了服务端初始化、连接接受、业务逻辑处理等关键模块。

项目结构与依赖

本示例采用模块化设计,主要包含两个头文件和对应的实现文件,编译时需统一链接:
- server.h/server.c:负责Socket服务建立、Epoll事件监听及进程管理。
- bussiness.h/bussiness.c:负责具体的客户端读写及业务逻辑(当前为打印回显)。

第1步:配置全局参数与服务端基础设置

在 server.h 中定义了一系列宏常量,用于灵活调整服务行为:

  • DEF_PORT 6000:默认监听端口。
  • MAX_EPOLL_SIZE 10:一次epoll_wait可返回的最大事件数。
  • DEF_PROCESS_NUM 5:初始创建的服务进程数量。

create_tcpsvr函数负责创建Socket、绑定地址并进入监听状态,使用htons转换端口字节序,确保跨平台正确性。

第2步:初始化Epoll与事件分发逻辑

init_epoll创建一个非阻塞的epollfd,并将监听套接字(listenfd)以EPOLLIN事件注册其中。
在 comm_to_clt 主循环中,程序调用epoll_wait等待事件。若检测到新连接,则进入 epoll_business 处理分支:

  1. 接受连接获取客户端文件描述符 clt_fd。
  2. 设置 fcntl(clt_fd, F_SETFL, O_NONBLOCK) 将客户端socket设为非阻塞。
  3. 将该socket添加至Epoll监听池,事件类型设置为 EPOLLIN|EPOLLET(边缘触发),以提升处理效率。

第3步:构建多进程并发模型

为避免僵尸进程,主进程通过 signal(SIGCHLD,SIG_IGN) 忽略子进程结束信号。
create_process 函数循环执行 fork(),根据 DEF_PROCESS_NUM 创建指定数量的子进程。每个子进程继承父进程的监听Socket并独立运行 comm_to_clt 循环,从而实现对客户端连接的负载均衡。主进程最后进入睡眠等待。

第4步:实现业务读写接口

bussiness.c 提供了基础的读写封装:
- read_sock 和 write_sock 分别封装系统调用,并在出错时打印错误信息。
- main_service 为具体业务入口,目前仅将接收到的数据进行打印输出(printf)。在实际应用中,此处应替换为具体的数据解析或响应生成逻辑。

编译与运行方法

将所有源代码放置在同一目录下,使用GCC进行编译。由于涉及多线程/进程管理及网络编程,需链接标准库:

gcc -o tcp_server server.c bussiness.c

启动后可使用Telnet或Netcat工具连接测试:

nc localhost 6000

排错与建议

  • 内存泄漏风险:上述代码中,每次处理完一个连接都会调用 close(ev.data.fd) 关闭Socket,这是正确的做法。但在实际复杂场景中,请确保所有动态分配的内存均已释放。
  • ET模式陷阱:Epoll使用边缘触发(ET)模式时,必须确保在一次事件中读完所有可用数据,否则可能导致后续数据丢失。当前示例较为简单,建议在真实场景中加入循环读取直到EAGAIN的逻辑。
  • 孤儿进程:虽然使用了 SIG_IGN 忽略SIGCHLD,但在某些特殊退出场景下,建议增加 waitpid(-1, NULL, WNOHANG) 调用以确保资源回收。

总结

该示例展示了Linux环境下高性能网络服务的基础构建方式。通过Epoll减少上下文切换开销,配合多进程提升吞吐量。以上就是C语言多进程TCP服务器实现的详细内容,更多关于高性能服务器开发的相关资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。