多进程服务器

int main(int argc, char const *argv[])
{
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock < 0)
    {
        perror("sock err\n");
        return -1;
    }
    printf("sock success\n");

    struct sockaddr_in shiny, acc;
    shiny.sin_addr.s_addr = inet_addr(argv[1]);
    shiny.sin_family = AF_INET;
    shiny.sin_port = htons(atoi(argv[2]));
    int len = sizeof(shiny);
    if (bind(sock, (struct sockaddr *)&shiny,len) < 0)
    {
        perror("bind err\n");
        return -1;
    }
    printf("bind success\n");
    if (listen(sock, 6) < 0)
    {
        perror("listen err\n");
        return -1;
    }
    printf("listenn ok\n");
#define N 64
    char buf[N];
    while (1)
    {
        int accfd = accept(sock, (struct sockaddr *)&acc, &len);
        if (accfd < 0)
        {
            perror("accfd er\n");
            return -1;
        }
        pid_t pid;
        pid = fork();
        if (pid == 0) /// son
        {
            while (1)
            {
                memset(buf, 0, N);
                int ret = read(accfd, buf, N);
                if (ret > 0)
                {
                    printf("%d:%s\n", accfd, buf);
                }
                else if (ret == 0)
                {
                    printf("%d:quit\n", accfd);
                }
                else
                {
                    perror("readn err\n");
                    break;
                }
            }
            exit(0);
        }
        else if (pid > 0) // fu
        {
            close(accfd);
        }
    }
    close(sock);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值