C语言线程池实现服务器并发连接:优化代码中的错误

在 C 语言线程池实现服务器并发连接代码中,add_connfdaddr 函数存在一个错误。该函数用于添加新的已连接套接字,但是代码中 if 语句中的判断条件写成了赋值语句,导致程序无法正确添加新的连接。

错误代码

// 添加新的已连接套接字
int add_connfdaddr(int connfd)
{
    if(cli->count>=60)
    {
        printf("客户端可连接数已达到最大值\n");
        return -1;
    }

    int i=0;
    for(i;i<60;i++)
    {
        if(cli->clid[i]=-1) // 错误:这里应该是比较操作符 ==
        {
            cli->clid[i]=connfd;
            cli->count++;
            printf("cli->clid[%d]:%d\n",i,connfd);
            break;
        }
    }
    return 0;
}

错误分析

if(cli->clid[i]=-1) 中,= 是赋值操作符,会将 -1 赋值给 cli->clid[i],而 == 是相等比较操作符,用于判断 cli->clid[i] 是否等于 -1。由于代码中错误地使用了赋值操作符,导致 cli->clid[i] 始终被赋值为 -1,从而无法进入 if 语句的代码块,导致 i 始终为 0,无法添加新的连接。

修正后的代码

// 添加新的已连接套接字
int add_connfdaddr(int connfd)
{
    if(cli->count>=60)
    {
        printf("客户端可连接数已达到最大值\n");
        return -1;
    }

    int i=0;
    for(i;i<60;i++)
    {
        if(cli->clid[i] == -1) // 修正:使用比较操作符 ==
        {
            cli->clid[i]=connfd;
            cli->count++;
            printf("cli->clid[%d]:%d\n",i,connfd);
            break;
        }
    }
    return 0;
}

总结

在编写代码时,要仔细区分赋值操作符和比较操作符,避免使用错误的操作符导致程序出现逻辑错误。同时,建议开发者在编写代码时养成良好的代码风格,例如使用缩进、添加注释等,方便阅读和调试代码。

C语言线程池实现服务器并发连接:优化代码中的错误

原文地址: https://www.cveoy.top/t/topic/j1dO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录