博客
关于我
linux的基础知识——多进程并发服务器
阅读量:764 次
发布时间:2019-03-23

本文共 1823 字,大约阅读时间需要 6 分钟。

1.实现一个多进程的并发服务器

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERV_IP "192.168.0.2"#define SERV_PORT 8888void wait_child(int signo) { while (waitpid(0, NULL, WNOHANG) > 0) { return; } return;}int main() { pid_t pid; int lfd, cfd; struct sockaddr_in serv_addr, cli_addr; socklen_t cli_addr_len; char buf[BUFSIZ]; int n, i, ret; lfd = socket(AF_INET, SOCK_STREAM, 0); if (lfd == -1) { perror("socket error"); exit(1); } bzero(&serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(SERV_PORT); //serv_addr.sin_addr.s_addr = inet_pton(AF_INET, SERV_IP, &serv_addr.sin_addr.s_addr); serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); ret = bind(lfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); if (ret == -1) { perror("bind error"); exit(1); } ret = listen(lfd, 128); if (ret == -1) { perror("listen error"); exit(1); } while (1) { cli_addr_len = sizeof(cli_addr); cfd = accept(lfd, (struct sockaddr *)&cli_addr, &cli_addr_len); if (cfd == -1) { perror("accept error"); exit(1); } printf("client IP:%s,port:%d\n", inet_ntop(AF_INET, &cli_addr.sin_addr.s_addr, cli_IP, sizeof(cli_IP)), ntohs(cli_addr.sin_port)); pid = fork(); if (pid < 0) { perror("fork error"); exit(1); } else if (pid == 0) { close(lfd); while (1) { n = read(cfd, buf, sizeof(buf)); if (n == 0) { close(cfd); return 0; } else if (n == -1) { perror("read error"); exit(1); } else { for (i = 0; i < n; i++) { if (buf[i] == '\n') { buf[i] = '\0'; } } } } } }}

改写说明:

  • 保持了代码的基础功能,但添加了更多注释,方便理解
  • 逐步解释了实现的关键点:
    • socket类型与协议
    • 地址类型与端口设置
    • bind接口的实现
    • listen接口的实现
    • accept接口的实现
    • client处理流程
  • 保持了代码的结构和流程,但增加了对关键部分的解释
  • 采用了更清晰的段落结构,便于技术人员阅读
  • 保留了错误处理代码,但突出了关键部分的实现
  • 转载地址:http://sulzk.baihongyu.com/

    你可能感兴趣的文章
    Mysql学习总结(5)——MySql常用函数大全讲解
    查看>>
    Mysql学习总结(60)——并发量大、数据量大的互联网业务数据库设计规范总结
    查看>>
    Mysql学习总结(61)——MySQL优化之DBA级优化整理汇总
    查看>>
    Mysql学习总结(62)——MySQL连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link问题
    查看>>
    Mysql学习总结(63)——Mysql数据库架构方案选择与分析
    查看>>
    Mysql学习总结(64)——Mysql配置文件my.cnf各项参数解读
    查看>>
    Mysql学习总结(65)——项目实战中常用SQL实践总结
    查看>>
    Mysql学习总结(66)——设置MYSQL数据库编码为UTF-8
    查看>>
    Mysql学习总结(67)——MYSQL慢查询日志
    查看>>
    Mysql学习总结(68)——MYSQL统计每天、每周、每月、每年数据 SQL 总结
    查看>>
    Mysql学习总结(69)——Mysql EXPLAIN 命令使用总结
    查看>>
    Mysql学习总结(6)——MySql之ALTER命令用法详细解读
    查看>>
    Mysql学习总结(70)——MySQL 优化实施方案
    查看>>
    Mysql学习总结(71)——MySQL 重复记录查询与删除总结
    查看>>
    Mysql学习总结(71)——数据库介绍(MySQL安装 体系结构、基本管理)再回顾
    查看>>
    Mysql学习总结(72)——MySQL 开发者开发,设计规范再总结
    查看>>
    Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
    查看>>
    Mysql学习总结(74)——慢SQL!压垮团队的最后一根稻草!
    查看>>
    Mysql学习总结(75)——并发量大、数据量大的互联网业务数据库设计军规
    查看>>
    Mysql学习总结(76)——MySQL执行计划(explain)结果含义总结
    查看>>