博客
关于我
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/

    你可能感兴趣的文章
    MSB与LSB
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    MsEdgeTTS开源项目使用教程
    查看>>
    msf
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL数据库迁移到Oracle(二)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>
    Myeclipse常用快捷键
    查看>>
    MyEclipse更改项目名web发布名字不改问题
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    mt-datetime-picker type="date" 时间格式 bug
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
    查看>>
    myeclipse配置springmvc教程
    查看>>