一 概述:
(一)功能:
1.bind函数把一个本地协议地址赋予给一个套接字,即套接字绑定。
2.对于网际协议,协议地址是IP地址和端口号的组合。
3.一般而言,服务器都调用bind,而客户端调用bind,绑定客户端套接字地址意义不大。
(二)格式:
1.语法:
*int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen)
2.参数说明:
*sockfd:socket函数返回的套接字描述符。
*addr:指向特定于协议的地址结构。
*addrlen:该地址结构的长度。
3.套接字是捆绑的主体,IP地址和端口是捆绑在套接字上的客体。
4.IP地址和端口可以都指定、指定一个或都不指定。
二 使用指南:
(一)绑定细节:
1. 端口:一般情况下,服务器在启动时绑定它们众所周知的端口。如果TCP客户或服务器未调用bind绑定一个端口,当调用connect或listen时,内核就要为相应套接字选择一个临时端口。对于TCP客户来说是正常的,但对于服务器却极为罕见。
2. IP地址:进程可以把一个特定的IP地址绑定到它的套接字上,不过这个IP地址必须属于它所在主机的网络接口之一。
*对于TCP客户:为在该套接字上发送的数据报指定了源IP地址。客户通常不把IP地址绑定到套接字上,当连接套接字时,内核根据所用外出网络接口来选择源IP地址,外出接口取决于到达服务器所需的路径。
*对于TCP服务器:就限定该套接字只接收那些目的IP地址为这个IP地址的客户连接。如果服务器没有绑定IP地址,内核就把客户发送SYN的目的IP地址作为服务器的源IP地址。
(二)使用细节:
1.端口号:指定为0,则内核在bind被调用时选择一个临时端口。为了得到这个临时端口名字,必须getsockname来返回协议地址。
2.IP地址:
*IPv4:通配地址由常值INADDR_ANY,其值一般为0,它告知内核去选择IP地址。
*IPv6:通配地址由in6addr_any指定。
三 SO_REUSEADDR和SO_REUSEPORT套接字选项:
*待续。。。