函数bind
头文件:
#include <sys/types.h>
#include <sys/socket.h>
函数功能:
把协议族中的特定地址赋值给socket,例如:对应AF_INET,AF_INET6就是把一个ipv4或ipv6的地址和端口号组合起来赋值给socket。
函数原型:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
sockfd:服务器socket描述符
addr:一个const struct sockaddr *指针,指向要绑定给服务器sockfd的协议地址,其中不同的协议对应不同的结构:
ipv4对应的是:
struct sockaddr_in
{
sa_family_t sin_family;
in_port sin_port;
struct in_addr sin_addr;
}
struct in_addr
{
uint32_t s_addr;
}
addrlen:地址的长度
通常服务器在启动的时候,会绑定一个众所周知的地址(IP地址+端口号)用于提供服务,客户就可以通过该地址来连接服务器;而客户端就不用指定,由系统自动分配一个端口号和IP地址进行组合。这就是为什么服务器在listen之前会调用bind(),而客户端就不需要,客户端是在connect()时由系统随机进行生成。