bind函数

bind函数

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

表13.4   bind函数


头文件


<sys/types.h>

<sys/socket.h>


函数形式


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 <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
#include <stdlio.h>

#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);
}

}

时间: 2024-10-26 13:59:43

bind函数的相关文章

(十一)socket、connect、bind函数详解

一.socket函数 1.头文件: #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> 2.函数原型: int socket(int domain, int type, int protocol); socket函数类似于open,用来打开一个网络连接,如果成功则返回一个网络文件描述符(int类型),之后我们操作这个网络连接都通过这个网络文件描述符. dimain:域,网络域,网络地址范围(IPV4或IPV6

socket bind函数

1 #include<stdio.h> 2 #include<sys/types.h> 3 #include<sys/socket.h> 4 #include<netinet/in.h> 5 #include<arpa/inet.h> 6 #include<unistd.h> 7 #define PORT 2345 8 #include<stdlib.h> 9 #include<string.h> 10 int

C++ bind函数适配器

在我之前的博客让类成员函数指针成为可调用对象里有提到bind函数适配器,现在在这里介绍一下. 适配器可以让某一个看上去像另一个行为,比如栈.队列等,底层使用链表去完成功能,我们通过操作底层链表去实现栈.队列等的行为.bind是函数适配器,通过bind返回的可调用对象去完成指定函数的功能. bind的头文件是<functional>,可使用命名空间std::placeholders的_n形式引用外部参数,属于C++11标准. 使用例子: // main.cpp #include <func

模拟实现兼容低版本IE浏览器的原生bind()函数功能

模拟实现兼容低版本IE浏览器的原生bind()函数功能: 代码如下: if(!Function.prototype.bind){   Function.prototype.bind=function(oThis){     if (typeof this !== 'function'){       throw new TypeError('调用者不是当前函数对象');     }       var aArgs = Array.prototype.slice.call(arguments, 1

C++拾遗--bind函数绑定

C++拾遗--bind函数绑定 前言 函数绑定bind函数用于把固定的参数与已知的函数进行绑定,形成新的函数,从而减少参数的个数,降低函数的调用难度.需要指出:bind就是函数适配器. bind函数 实例 #include <iostream> #include <functional> using namespace std; using namespace std::placeholders; int main() { auto fun = [](int *array, int

《Javascript高级程序设计》读书笔记之bind函数详解

为什么需要bind var name = "The Window"; var object = { name: "My Object", getNameFunc: function () { return function () { return this.name; } } }; alert(object.getNameFunc()()); //"The Window" object.getNameFunc()返回一个匿名函数,在全局环境调用该

angular.bind() 函数

angular.bind bind 函数有三个参数, 参一:是一个对象 参二:是一个 function 参三:是用来给参二传参数的,可写可不写,看你心情 参数也可以在调用函数的时候传,也可以当做第三个参数传 在函数的体内可以访问参数一的所有属性值 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document<

2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用

1        打开建好的T32  Cocos2dx-3.2的一个项目 2        设置Cocos显示窗口的位置是在AppDelegate.cpp中: 3  设置自适应窗口大小的代码是在上面的代码后面紧接着就添加: glview->setDesignResolutionSize(480,320, ResolutionPolicy::EXACT_FIT); 3        cocos2d-x-3.2项目案例(3.2版本之后都去掉了CC前缀) 4        项目目录结构如下: 编写公共

理解bind函数

前言:之前一直不懂这个函数是干嘛的,最近慢慢有点懂了,说一说自己的理解~ 本文按以下3个方面来谈谈bind函数 1)对bind函数的理解: 2)如何使用bind函数 3)自定义bind函数 (https://msdn.microsoft.com/zh-cn/library/ff841995中有bind函数较详细的说明) (1)bind函数的理解 语法: function.bind(thisArg[,arg1[,arg2[,argN]]]) 首先不看传的参数,bind函数实现的功能就是将funct

Function.prototype.bind函数兼容处理

今天敲代码的时候,想了想bind函数 Function.prototype.bind = Function.prototype.bind || function (target) { var self = this; return function (args) { if (!(args instanceof Array)) { args = [args]; } self.apply(target, args); }; }; /*example 1*/ function f1(y, z){ re