linux socket API / bind
一、函数原型
#include
int bind (int __fd, const struct sockaddr * __addr, socklen_t __len)
该函数调用之前,必创建 socket ,在 linux 内核中,socket 描述符映射为 struct socket ,该结构体中包含了该 socket 所需要的所有信息,包括 server 和 client 的 ip 和 port 等。
当通过函数 socket 创建 socket 描述符之后,实际上该描述字对应的结构体里面是没有内容的,所以为了让该 socket 动起来,就得将该结构体中所缺失的内容附上,该功能的实现 api 就是 bind 。
二、参数详解
1、__fd
socket 函数返回的描述字,指定被绑定的 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
{//协议族uint16_t sin_family;//端口号(网络字节序)uint16_t sin_port; //IP 地址(网络字节序)uint32_t s_addr; //为了保持与 struct sockaddr 结构体大小相等,故填充之用。unsigned char sin_zero[8];
};
协议族是 AF_INET 并且 socket 的类型是 SOCK_STREAM 和 SOCK_DGRAM 时使用。
(3)sockaddr_un
struct sockaddr_un
{uint16_t sun_family;// 绝对路径。char sun_path[108];
};
协议族是 AF_UNIX 时使用。
3、__len
标示实际使用的存储地址信息的结构的大小,例如:
sizeof(sockaddr_in)
sizeof(sockaddr_un)
三、返回值
成功返回0,失败返回 -1 ,并置 errno 。
(SAW:Game Over!)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
