|
|
@@ -836,3 +836,16 @@ int bind(int socket, const struct sockaddr *address, socklen_t address_len);
|
|
|
|
|
|
如果TCP客户端或服务器未曾调用`bind`函数绑定端口,当调用`connect`或`listen`时,内核会临时分配端口。让内核选择临时端口对TCP客户端来说正常,但是**服务器的端口必须指定**,因为服务器端口需要外部知道才能主动连接
|
|
|
|
|
|
+进程可以把一个特定的IP绑定到它的套接字上,不过这个IP地址必须属于其所在主机的网络接口之一
|
|
|
+
|
|
|
+- 对于TCP客户端来说,这就是为在该套接字上发送的IP数据报制定了源IP地址
|
|
|
+- 对于服务器来说,这就限定该套接字只接受那些目的地为这个IP地址的客户连接
|
|
|
+
|
|
|
+| IP地址 | 端口 | 结果 |
|
|
|
+| --- | --- | --- |
|
|
|
+| 通配地址 | 0 | 内核选择IP地址和端口 |
|
|
|
+| 通配地址 | 非0 | 内核选择IP地址,进程指定端口 |
|
|
|
+| 本地IP地址 | 0 | 进程指定IP地址,内核选择端口 |
|
|
|
+| 本地IP地址 | 非0 | 进程指定IP地址和端口 |
|
|
|
+
|
|
|
+
|