TCP/IP,多进程服务器,可多连接,通过fork创建子进程并由子进程维护与客户端的连接,通过信号量回收子进程

该博客介绍了一种在Linux环境下实现TCP/IP多进程服务器的方法,通过fork创建子进程来维护与客户端的连接,并利用信号量回收子进程,避免僵尸进程的产生。详细步骤包括服务端监听、接受连接、父子进程套接字处理以及服务端整体代码展示。
摘要由CSDN通过智能技术生成

TCP/IP,多进程服务器,可多连接,通过fork创建子进程并由子进程维护与客户端的连接,通过信号量回收子进程

一、思路
1、服务端创建并维护用于监听端口的套接字
2、当监听套接字accept到客户端的连接后,使用fork创建子进程
3、通过判断fork的返回值分辨父进程和子进程,
4、父进程关闭与客户端通信的套接字,子进程关闭监听的套接字,原因见:

Linux下fork复制出来的进程数据中文件描述符的共享状态,.data数据拷贝的设定,无用文件描述符需要关闭,仅保留当前进程需要使用的文件描述符
5、客户端关闭后,与之相连的子进程退出变成僵尸进程,父进程通过信号量回收子进程

二、服务端连接思路
1、父进程创建子进程并进行判断

Listen(lfd,128);
    while(1)
    {
   
        cfd = Accept(lfd,(struct sockaddr*)&clt_addr,&clt_addr_len);
        pid = fork();
        if(pid < 0)
        {
   
            sys_err("fork error");
        }
        else if(pid == 0)
        {
   
            close(lfd);
            break;
        }
        else
        {
   
            close(cfd);
        }
    }
    if(pid == 0)
    {
   
        while(1)
        {
   
            ret = read(cfd,buf,sizeof(buf));
            if(ret == 0)
            {
   
                printf("client is been closed,close\n");
                close(cfd);
                exit(</
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值