【问题标题】:Why does the accept() call uses an empty sockaddr structure?为什么 accept() 调用使用空的 sockaddr 结构?
【发布时间】:2018-04-04 17:45:44
【问题描述】:

我刚被问到这个问题,无法回答,我看了看我是如何编码的,真的很困惑。 这就是我在服务器中编写 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的第二个参数是一个指向结构体的指针,但不知道为什么它应该是空的。

【问题讨论】:

  • 将由accept填写。它要么是空指针,要么是指向应返回连接套接字地址的 sockaddr 结构的指针。

标签: c unix operating-system unix-socket


【解决方案1】:

weel,是一个输出参数,可以发送也可以不发送,但是发送的时候会被连接的socket填满。

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

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

【讨论】:

  • 详细来说,就像打电话一样。如果您拨打电话,您需要知道对方的电话号码。要接听电话,您只需拿起电话即可。
  • 如果您想知道来电者的电话号码,请查看来电显示。但是,如果您不想这样做,则不必这样做。与accept() 相同。输出sockaddr 就像来电显示。而且如果你确实使用它,你不必单独使用getpeername()来获取它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 2011-11-16
  • 2014-02-01
  • 2014-04-26
  • 1970-01-01
相关资源
最近更新 更多