函数原型
1 | #include <sys/types.h> |
形参
bind将my_addr所指的sockaddr地址分配给未命名的sockfd文件描述符。addrlen参数指出my_addr的长度。
返回值
bind成功返回0,失败则返回-1并设置errno。其中两个常见的errno如下:
- EACCES:被绑定的地址是受保护的地址。比如普通用户将socket绑定到知名服务端口(0~1023)上。
- EADDRINUSE:被绑定的地址正在使用中。比如将socket绑定到一个处于TIME_WAIT状态的socket地址。
命名socket的原因
创建socket时,我们为socket指定了地址族,但是未指定使用该地址族中的哪个具体的socket地址。所以需要通过socket命名来,将一个socket与一个socket地址绑定。另外,在服务器我们通常要命名socket,因为只有命名后,客户端才能知道该如何连接它。客户端则通常不需要命名socket,而是采用匿名的方式,即使用操作系统自动分配的socket地址。
注意:socket地址包含了“协议、IP地址和端口号”这三要素,而命令则是通过调用bind把socket与这三要素绑定在一起