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

    你可能感兴趣的文章
    Objective-C实现Trie字典树算法(附完整源码)
    查看>>
    Objective-C实现Trie段树算法(附完整源码)
    查看>>
    Objective-C实现Trim函数功能(附完整源码)
    查看>>
    Objective-C实现triplet sum三元组和算法(附完整源码)
    查看>>
    Objective-C实现UDP传输系统源码(附完整源码)
    查看>>
    Objective-C实现UDP内网穿透(附完整源码)
    查看>>
    Objective-C实现ugly numbers丑数算法(附完整源码)
    查看>>
    Objective-C实现unescape函数功能(附完整源码)
    查看>>
    Objective-C实现unet模型(附完整源码)
    查看>>
    Objective-C实现volume conversions体积转换算法(附完整源码)
    查看>>
    Objective-C实现wc函数功能(附完整源码)
    查看>>
    Objective-C实现weight conversion权重转换算法(附完整源码)
    查看>>
    Objective-C实现wiggle sort摆动排序算法(附完整源码)
    查看>>
    Objective-C实现word frequency functions词频函数算法(附完整源码)
    查看>>
    Objective-C实现XOR Cipher异或密码算法(附完整源码)
    查看>>
    Objective-C实现XZordering算法(附完整源码)
    查看>>
    Objective-C实现XZordering算法(附完整源码)
    查看>>
    Objective-C实现y = sinx函数的积分运算(附完整源码)
    查看>>
    Objective-C实现y = x的平方函数的积分运算(附完整源码)
    查看>>
    Objective-C实现z-algorithm算法(附完整源码)
    查看>>