04-将socket绑定到地址_bind()
56.3 将socket绑定到地址:bind()
bind()系统调用将一个socket绑定到一个地址上。
sockfd参数是在上一个socket()调用中获得的文件描述符。addr参数是一个指针,它指向了一个指定该socket绑定到的地址的结构。传入这个参数的结构的类型取决于socket domain。addrlen参数指定了地址结构的大小。addrlen参数使用的socklen_t数据类型在SUSv3被规定为一个整数类型。
一般来讲,会将一个服务器的socket绑定到一个众所周知的地址——即一个固定的与服务器进行通信的客户端应用程序提前就知道的地址。
除了将一个服务器的socket绑定到一个众所周知的地址之外还存在其他做法。例如,对于一个Internet domain socket来讲,服务器可以不调用bind()而直接调用listen(),这将会导致内核为该socket选择一个临时端口。(在58.6.1节中将会介绍临时端口。)之后服务器可以使用getsockname()(61.5节)来获取socket的地址。在这种场景中,服务器必须要发布其地址使得客户端能够知道如何定位到服务器的socket。这种发布可以通过向一个中心目录服务应用程序注册服务器的地址来完成,之后客户端可以通过这个服务来获取服务器的地址。(如Sun RPC使用了自己的portmapper服务器来解决这个问题。)当然,目录服务应用程序的socket必须要位于一个众所周知的地址上。