Unix Network Programming(11)---bind 函数

来源:互联网 发布:csol星陨巨锤连击编程 编辑:程序博客网 时间:2024/05/21 00:20

bind函数把一个本地协议地址赋予一个套接字。对于网际网协议,协议地址是32位的IPv4地址或128位的IPv6地址与16位的TCP或UDP端口号的组合。

#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);  /*若成功则为0,若出错则为1*/

第二个参数是一个指向特定于协议的地址结构的指针,第三个参数是该地址结构的长度。对于TCP,调用bind函数可以指定一个端口号,或指定一个IP地址,也可以两者都指定,还可以都不指定。

  • 服务器在启动时捆绑它们的众所周知端口。如果一个TCP客户或服务器未曾调用bind捆绑一个端口,当调用connect或listen时,内核就要为相应的套接字选择一个临时端口。这对TCP客户来说是正常的,除非需要一个预留端口;然而对于TCP服务器来说时及其罕见的,因为服务器是通过它们的众所周知端口被大家认识的。
  • 进程可以把一个特定的IP地址捆绑到它的套接字上,不过这个IP地址必须属于其所在主机的网络接口之一。对于TCP客户,这就为在该套接字上发送IP数据报指派了源IP地址;对于TCP服务器,这就限定该套接字只接收目的地为该IP地址的客户连接。如果TCP服务器没有把IP地址捆绑到它的套接字,内核就把客户发送的SYN的目的IP作为服务器的源IP地址。

如果指定端口号为0,那么内核就在bind被调用时选择一个临时接口。然而如果指定IP地址为通配地址,那么内核将等到套接字已连接(TCP)或已在套接字上发出数据报(UDP)时才选择一个本地IP地址。

0 0