网络编程socket之bind函数

转载 2012年03月31日 11:11:16

摘要 :在套接口中,一个套接字只是用户程序与内核交互信息的枢纽,它自身没有太多的信息,也没有网络协议地址和 端口号等信息,在进行网络通信的时候,必须把一个套接字与一个地址相关联,这个过程就是地址绑定的过程。许多时候内核会我们自动绑定一个地址,然而有时用 户可能需要自己来完成这个绑定的过程,以满足实际应用的需要,最典型的情况是一个服务器进程需要绑定一个众所周知的地址或端口以等待客户来连接。这个事由 bind的函数完成。

从bind函数功能我们很容易推测出这个函数的需要的参数与相应的返回值,如果此时大家已经对socket接口有点熟悉了:

#include<sys/socket.h> 
int bind( int sockfd, struct sockaddr* addr, socklen_t addrlen) 
返回:0 ──成功, - 1 ──失败
参数sockfd
指定地址与哪个套接字绑定,这是一个由之前的socket函数调用返回的套接字。调用bind的函数之后,该套接字与一个相应的地址关联,发送到这个地址的数据可以通过这个套接字来读取与使用。
参数addr
指定地址。这是一个地址结构,并且是一个已经经过填写的有效的地址结构。调用bind之后这个地址与参数sockfd指定的套接字关联,从而实现上面所说的效果。
参数addrlen
正如大多数socket接口一样,内核不关心地址结构,当它复制或传递地址给驱动的时候,它依据这个值来确定需要复制多少数据。这已经成为socket接口中最常见的参数之一了。

bind函数并不是总是需要调用的,只有用户进程想与一个具体的地址或端口相关联的时候才需要调用这个函数。如果用户进程没有这个需要,那么程序可 以依赖内核的自动的选址机制来完成自动地址选择,而不需要调用bind的函数,同时也避免不必要的复杂度。在一般情况下,对于服务器进程问题需要调用 bind函数,对于客户进程则不需要调用bind函数。

bind函数

int bind( 
SOCKET s, 
const struct sockaddr FAR *name, 
int namelen 
);

当创建了一个Socket以后,套接字数据结构中有一个默认的IP地址和默认的端口号。一个服务程序必须调用bind函数来给其绑定一个IP地址和 一个特定的端口号。客户程序一般不必调用bind函数来为其Socket绑定IP地址和断口号。该函数的第一个参数指定待绑定的Socket描述符;第二 个参数指定一个sockaddr结构,该结构是这样定义的: 
struct sockaddr { 
u_short sa_family; 
char sa_data[14]; 
};

其中sin_family置AF_INET;sin_port指明端口号;sin_addr结构体中只有一个唯一的字段s_addr,表示IP地 址,该字段是一个整数,一般用函数inet_addr()把字符串形式的IP地址转换成unsigned long型的整数值后再置给s_addr。有的服务器是多宿主机,至少有两个网卡,那么运行在这样的服务器上的服务程序在为其Socket绑定IP地址时 可以把htonl(INADDR_ANY)置给s_addr,这样做的好处是不论哪个网段上的客户程序都能与该服务程序通信;如果只给运行在多宿主机上的 服务程序的Socket绑定一个固定的IP地址,那么就只有与该IP地址处于同一个网段上的客户程序才能与该服务程序通信。我们用0来填充 sin_zero数组,目的是让sockaddr_in结构的大小与sockaddr结构的大小一致。下面是一个bind函数调用的例子: 
struct sockaddr_in saddr; 
saddr.sin_family = AF_INET; 
saddr.sin_port = htons(8888); 
saddr.sin_addr.s_addr = htonl(INADDR_ANY); 
bind(ListenSocket,(struct sockaddr *)&saddr,sizeof(saddr));



转自http://blog.csdn.net/dongliqiang2006/article/details/5824651

相关文章推荐

网络编程socket之bind函数

  • 2015-04-30 10:25
  • 28KB
  • 下载

linux网络编程常用函数详解与实例(socket-->bind-->listen-->accept)

标签: linux 网络 socket bind listen accept connect it 分类: linux学习篇   常用的网络命令: ...

网络编程socket之bind函数

摘要 : 在套接口中,一个套接字只是用户程序与内核交互信息的枢纽,它自身没有太多的信息,也没有网络协议地址和端口号等信息,在进行网络通信的时候,必须把一个套接字与一个地址相关联,这个过程就是地址绑定...

linux网络编程常用函数详解与实例(socket-->bind-->listen-->accept)

常用的网络命令:netstat命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可以使...

网络编程 socket 之 bind 函数

网络编程socket之bind函数 摘要 :在套接口中,一个套接字只是用户程序与内核交互信息的枢纽,它自身没有太多的信息,也没有网络协议地址和端口号等信息,在进行网络通信的时候,必须把一个套接字与一...

linux网络编程常用函数详解与实例(socket-->bind-->listen-->accept)

转载自 http://blog.sina.com.cn/s/blog_50571b1f010082pg.html               ...

linux网络编程常用函数详解与实例(socket-->bind-->listen-->accept)

转载:http://blog.sina.com.cn/s/blog_50571b1f010082pg.html 常用的网络命令: netstat 命令netstat是用来...

linux网络编程常用函数详解与实例(socket-->bind-->listen-->accept)

原文地址:http://blog.sina.com.cn/s/blog_50571b1f010082pg.html 常用的网络命令: netstat 命令netstat是用来显示...
  • zx824
  • zx824
  • 2012-07-13 16:40
  • 614

linux网络编程二:基础socket, bind, listen, accept, connect

最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。 1. 创建socket #include #include int socket(int...

网络编程socket之bind、Listen 及 accept

1.bind      bind函数用于将套接字与指定端口相连.本函数适用于未连接的数据报或流类套接口,在connect()或listen()调用前使用。当用socket()创建套接口后,它便存...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)