服务端要提供服务, 要经过这么几个过程. 创建Socket → 绑定地址端口 → 监听端口.
创建Socket 使用的函数如下,
int socket(int domain, int type, int protocol)
domain 就是指 PF_INET、PF_INET6 以及 PF_LOCAL 等,表示什么样的套接字。
type 可用的值是:
参数 protocol 原本是用来指定通信协议的,但现在基本废弃。因为协议已经通过前面两个参数指定完成。protocol 目前一般写成 0 即可。
创建出来的套接字如果需要被别人使用,就需要调用 bind 函数把Socket和Socket地址绑定. 调用 bind 函数的方式如下:
bind(int fd, sockaddr * addr, socklen_t len)
我们需要注意到 bind 函数后面的第二个参数是通用地址格式sockaddr * addr
。这里有一个地方值得注意,那就是虽然接收的是通用地址格式,实际上传入的参数可能是 IPv4、IPv6 或者本地套接字格式。bind 函数会根据 len 字段判断传入的参数 addr 该怎么解析,len 字段表示的就是传入的地址长度,它是一个可变值。
这里其实可以把 bind 函数理解成这样:
bind(int fd, void * addr, socklen_t len)