Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1335857
  • 博文数量: 177
  • 博客积分: 3640
  • 博客等级: 中校
  • 技术积分: 1778
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-27 16:51
文章分类

全部博文(177)

文章存档

2014年(1)

2013年(10)

2012年(3)

2011年(163)

分类: LINUX

2011-05-31 21:36:23

13.2.3  bind函数

bind函数用于将套接字与指定端口相连,其具体信息如表13.4所示。

表13.4   bind函数

头文件

函数形式

int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);

返回值

成功

失败

是否设置errno

0

−1

说明:
当调用socket函数创建套接字后,该套接字并没有与本机地址和端口等信息相连,bind函数将完成这些工作。bind函数中的sockfd参数为调用socket函数后返回的文件描述符。my_addr参数为指向sockaddr结构体的指针(该结构体中保存有端口和IP地址信息)。addlen参数为结构体sockaddr的长度。

错误信息:
EACCES:地址受到保护,用户非超级用户。
EADDRINUSE:指定的地址已经在使用。
EBADF:sockfd参数为非法的文件描述符。
EINVAL:socket已经和地址绑定。
ENOTSOCK:参数sockfd为文件描述符。

实例演练:
下面的代码来自于Linux系统的man帮助,注意创建套接字和使用bind函数实现socket的文件描述符与地址信息绑定的过程。

#include
#include
#include
#include

#define MY_SOCK_PATH "/somepath"

int
main(int argc, char *argv[])
{
int sfd;
struct sockaddr_un addr;
 //创建通信的套接字
sfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (sfd == -1) {
perror("socket");
exit(EXIT_FAILURE);
}
 //初始化addr变量
memset(&addr, 0, sizeof(struct sockaddr_un));
addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, MY_SOCK_PATH,
sizeof(addr.sun_path) - 1);
 //将端口信息与套接字绑定
if (bind(sfd, (struct sockaddr *) &addr, sizeof
(struct sockaddr_un)) == -1) {
perror("bind");
exit(EXIT_FAILURE);
}

}

阅读(3334) | 评论(0) | 转发(4) |
0

上一篇:sockaddr_in结构

下一篇:listen函数

给主人留下些什么吧!~~