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_insockaddr_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!)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部