为什么我在尝试接受连接时遇到“无效参数”?

在下一个代码中,当我尝试连接客户端时,服务器显示以下错误:“无效参数”,我看不到错误。

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. 

非常感谢你。

阅读accept(2)上的文档:

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

因此,您需要使用sizeof(cli_dir)初始化传递给accepttam的值。 您很幸运,套接字库能够捕获您的错误,因为您传入的是未初始化的内存,这会导致未定义的行为。