c - sockaddr_storage 究竟是如何工作的?

标签 c sockets

我刚开始接触套接字编程。我不明白如何通过仅声明 sockaddr_storage 然后创建一个套接字 listen(),所有传入的连接都会自动存储在 sockaddr_storage 中。如果声明 5 个 sockaddr_storage 会怎么样?

最佳答案

How exactly does sockaddr_storage work?

sockaddr_storage 是一种大到足以为任何支持的协议(protocol)保存套接字地址的类型(sockaddr_in 用于 IPv4,sockaddr_in6 用于 IPv6,sockaddr_un 用于 UNIX 域,sockaddr_bth 用于蓝牙等)。

I don't understand how by just declaring sockaddr_storage and then make a socket listen(), all the incoming connections just automatically get stored in sockaddr_storage.

那是因为他们没有。 您必须将 sockaddr_storage 传递给一个用套接字地址填充它的函数,例如 accept()getsockname() getpeername()

What if you declare 5 sockaddr_storage?

然后你有 5 个 sockaddr_storage 类型的变量。没有什么特别的事情发生。这就像你问“如果你声明 5 个整数怎么办?”您仍然需要以某种方式填充它们。

关于c - sockaddr_storage 究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38801292/

相关文章:

c - 在 Rust 中声明一个结构或变量的正确方法是什么,它可以传递给需要指针的 C 代码?

c - TCP/P 套接字阻塞串行连接

java - 为什么 SocketChannel 是抽象的?

c++ - 如何在minifilter中的IRP_Create上获取复制文件的源路径

c - 由于未知原因,For 循环在输入时崩溃

c - 如何读取文件直到某个字符或 EOF?

c - 我的 FTP 服务器在请求用户名和密码后自动终止与客户端的连接

c - 使用 select() 的 TCP 服务器

服务器端的客户端地址为空

c++ - 如何使用 LibSoX 混合两个 wav 文件