Linux网络编程socket bind() 函数


bind()函数

名称:

        bind  -- 给socket 绑定一个地址名称

原型:

        #include <sys/socket.h>

        int bind(int socket, const struct sockaddr* address, socklen_t address_len);   

描述:

        bind()函数给一个 无名socket 分配一个地址名称。socket 是通过调用socket()函数创建的一个无名socket, 在刚被socket()函数创建的时候 标识他们的只是他们的协议族。

参数:

        socket:

                   标识需要绑定地址的socket文件的 文件描述符。

        address:

                   需要绑定给无名socket的地址指针。 其长度和结构都取决于,想要绑定的地址的 协议族。

        address_len:

                    绑定地址address所指向结构体的真实长度。

        正在使用的socket需要 进程 拥有合适的权限 才能执行bind()函数。


返回值:

        0: 如果正确的为无名socket绑定了地址 则返回0;

        -1: 否则返回-1, 并且置errno


错误信息:

        bind() 函数将会失败如果:

[EADDRINUSE] :

        需要绑定的地址正在被使用。

[EADDRNOTAVAIL]:

        需要绑定的地址在本机不可用。

[EAFNOSUPPORT]:

        需要绑定的地址协议族  和socket的协议族不匹配。

[EBADF]:

        socket所指的并不是一个合法的文件描述符。

[EFAULT]:

        address地址无法被访问。

[EINVAL]:

        socket 所指的文件描述符已经绑定了一个地址,而且不支持绑定到一个新的地址上;或者socket所指的文件描述符所指代的文件已经被关闭。

[ENOTSOCK]:

        socket所指向的并不是一个socket类型的文件描述符。

[EOPNOTSUPP]:

        socket所指向的文件并不支持绑定到一个地址。


如果socket的协议族为AF_UNIX, bind()函数在一下条件下也会出错:


[EACCES]:

        路径前缀的一个模块拒绝了 进程搜索的权限;请求创建的文件 请求写入目录的方式 被拒绝。
[EDESTADDRREQ] or [EISDIR]:

        参数address 所指的是一个空指针。

[EIO]:

        出现了IO错误

[ELOOP]:

         翻译address里的pathname时遇到太多的符号链接

[ENAMETOOLONG]:

         pathname的一部分超过了{NAME_MAX}定义的最大字符数, 或者整个pathname超过了{PATH_MAX}规定的字符数

[ENOENT]:

         pathname是一个空的字符串,或者pathname的一部分所指的文件(目录)并不存在。

[ENOTDIR]:

         address里的pathname的名称前缀并不是一个指定的目录。

[EROFS]:

         名字将会驻留在一个只读文件系统上,也就是说不能将一个socket绑定到一个只读文件系统上的名称。


此外,以下情况下也会导致bind函数失败:


[EACCES]:

         address所指定的地址受保护或者当前用户没有权限将socket绑定到address。

[EINVAL]:

         address_len 参数对此协议族并不合法。

[EISCONN]:

         socket已经处于链接状态。

[ENAMETOOLONG]:

         符号链接的路径名的解析产生的中间结果 的 长度超过了 {PATH_MAX} 规定的字符数。

[ENOBUFS]:

         没有足够的资源分配给这个call

[ENOSR]:

         没有足够的STREAMS 资源来完成绑定操作。


其他:

             应用程序可以通过getsockname() 函数获取分配给 socket的 地址名称。



原文出自:

http://pubs.opengroup.org/onlinepubs/007908799/xns/bind.html




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值