套接字API(二)bind函数

来源:互联网 发布:csgo 性能数据 编辑:程序博客网 时间:2024/05/17 04:59

一 概述:

(一)功能:

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套接字选项:

*待续。。。





原创粉丝点击