为什么accept()调用使用空的sockaddr结构?

时间:2018-04-04 17:45:45

标签: c unix operating-system unix-socket

我刚刚被问到这个问题并且无法回答它,我看着我是如何编码的,并且真的很困惑。 这就是我在服务器中编写accept()调用的方法:

struct sockaddr_in client;

size=sizeof(client);
if(( nds=accept(ds,(struct sockaddr*)&client,&size)) <0)
{
perror("accept");
close(ds);
exit(-1);
}

其中ds是套接字描述符

我知道accept的第二个参数是指向struct的指针,但不知道为什么它应该为空。

1 个答案:

答案 0 :(得分:3)

Weel,它是一个输出参数,您可以发送或不发送,但是当您发送它时,它将被连接套接字填充。

看看http://pubs.opengroup.org/onlinepubs/009695399/functions/accept.html

  

如果地址不是空指针,则为对等体的地址   接受的连接应存储在sockaddr结构中   按地址,该地址的长度应存储在   address_len指向的对象。