linux socket API / bind
一、函數(shù)原型
#include <sys/socket.h> int bind (int __fd, const struct sockaddr * __addr, socklen_t __len)? ? ? ? 該函數(shù)調用之前,必創(chuàng)建 socket ,在?linux 內核中,socket 描述符映射為?struct socket ,該結構體中包含了該 socket 所需要的所有信息,包括 server 和 client 的 ip 和 port 等。
? ? ? ? 當通過函數(shù) socket 創(chuàng)建 socket 描述符之后,實際上該描述字對應的結構體里面是沒有內容的,所以為了讓該 socket 動起來,就得將該結構體中所缺失的內容附上,該功能的實現(xiàn) api 就是 bind 。?
二、參數(shù)詳解
1、__fd
socket 函數(shù)返回的描述字,指定被綁定的 socket 。
2、__addr
保存地址(ip + port 或者 絕對路徑)信息的結構。包括一下三種:
(1)sockaddr
struct sockaddr {uint16_t sa_family; char sa_data[14]; };一般不直接使用,而是用它的變體?sockaddr_in 和 sockaddr_un 。
(2)sockaddr_in
struct sockaddr_in {//協(xié)議族uint16_t sin_family;//端口號(網(wǎng)絡字節(jié)序)uint16_t sin_port; //IP 地址(網(wǎng)絡字節(jié)序)uint32_t s_addr; //為了保持與 struct sockaddr 結構體大小相等,故填充之用。unsigned char sin_zero[8]; };協(xié)議族是 AF_INET 并且 socket 的類型是 SOCK_STREAM 和 SOCK_DGRAM 時使用。?
(3)sockaddr_un
struct sockaddr_un {uint16_t sun_family;// 絕對路徑。char sun_path[108]; };協(xié)議族是 AF_UNIX 時使用。?
3、__len
標示實際使用的存儲地址信息的結構的大小,例如:
sizeof(sockaddr_in) sizeof(sockaddr_un)三、返回值
成功返回0,失敗返回 -1 ,并置 errno 。
?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的linux socket API / bind的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux socket API / s
- 下一篇: linux socket API / l