Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我会有;无效参数";在尝试接受连接时?_C_Sockets_Network Programming - Fatal编程技术网

C 为什么我会有;无效参数";在尝试接受连接时?

C 为什么我会有;无效参数";在尝试接受连接时?,c,sockets,network-programming,C,Sockets,Network Programming,在下一段代码中,当我尝试连接客户端时,服务器显示以下错误: “无效参数”,我看不出错误 阅读以下文档: addrlen参数是一个值结果参数:它最初应该包含addr指向的结构的大小;返回时,它将包含返回地址的实际长度(字节)。当addr为NULL时,不填写任何内容 因此,您需要使用sizeof(cli\u dir)初始化传递到accept的tam的值。您很幸运,套接字库能够捕获您的错误,因为您正在传递未初始化的内存,这会导致未定义的行为。就是这样,非常感谢。我假设变量tam只是一个输出值,所以我甚

在下一段代码中,当我尝试连接客户端时,服务器显示以下错误:

“无效参数”,我看不出错误

阅读以下文档:

addrlen参数是一个值结果参数:它最初应该包含addr指向的结构的大小;返回时,它将包含返回地址的实际长度(字节)。当addr为NULL时,不填写任何内容


因此,您需要使用
sizeof(cli\u dir)
初始化传递到
accept
tam的值。您很幸运,套接字库能够捕获您的错误,因为您正在传递未初始化的内存,这会导致未定义的行为。

就是这样,非常感谢。我假设变量tam只是一个输出值,所以我甚至不认为它需要一个初始值。
if((l_sock=socket(AF_INET,SOCK_STREAM,0))!=-1)
{
    struct sockaddr_in srv_dir;

    srv_dir.sin_family=AF_INET;
    srv_dir.sin_port=8500;
    srv_dir.sin_addr.s_addr=INADDR_ANY;

    if((bind(l_sock,(struct sockaddr *)&srv_dir,sizeof(struct sockaddr_in)))!=-1)
    {
        if(!(listen(l_sock,5)))
        {
            signal(SIGINT,cerraje);
            int t_sock;
            struct sockaddr_in cli_dir;
            socklen_t tam;
            time_t tstmp;
            struct tm * res;
            res=(struct tm *)malloc(sizeof(struct tm));

            while(!key)
            {
                if((t_sock=accept(l_sock,(struct sockaddr *)&cli_dir,&tam))!=-1)
                {
                    tstmp=time(&tstmp);
                    res=gmtime(&tstmp);
                    send(t_sock,res,sizeof(struct tm),0);
                    wr_hora(*res,cli_dir.sin_addr);         
                }
                else
                    perror("Petición no atendida");//The error is printed here.