Linux套接字通信常用函数-bind

来源:互联网 发布:matlab矩阵diff 编辑:程序博客网 时间:2024/05/20 01:46

bind函数主要用于套接字通信的服务器端,用于绑定服务器要监听的地址和端口,所需要的头文件

#include<sys/types.h>
#include<sys/socket.h>
函数原型

int bind(int socket,const struct sockaddr* address,socklen_t address_len);
socket是你创建的套接字描述符,
address是服务器端的地址和端口,常见的使用方法如下
</pre><pre name="code" class="cpp"> struct sockaddr_in server_addr;  bzero(&server_addr, sizeof(server_addr));  server_addr.sin_family = AF_INET;  server_addr.sin_addr.s_addr = htonl(INADDR_ANY);  server_addr.sin_port = htons(SERVER_PORT);    /* 创建socket */ int server_socket_fd = socket(AF_INET, SOCK_DGRAM, 0); //tcp:SOCK_DGRAM if(server_socket_fd == -1)  {   perror("Create Socket Failed:");   exit(1);  }    /* 绑定套接口 */ if(-1 == (bind(server_socket_fd,(struct sockaddr*)&server_addr,sizeof(server_addr))))  {   perror("Server Bind Failed:");   exit(1);  }

返回值

当bind()函数调用错误的时候,它也是返回–1 作为错误发生的标志。errn 的值为错误代码。
注意
当你调用bind()的时候,不要把端口数设置的过小!小于1024 的所有端口都是保留下来作为系统使用端口的,没有root 权利无法使用。你可以使用1024 以上的任何端口,一直到65535
该函数用来指定一个端口号,一个IP地址,两者都指定,或者两者都不指定.可以不使用该函数调用。使用socket()得到套接口后可以直接调用函数conect()或者listen(),这时内核会自动给套接口分配一个地址和端口号(众所周知的端口号),这是常用的方法。只有在进程需要使用特定的网络地址和端口时才会进行绑定,即使用bind()函数。调用bind()的常见错误是EADDRINUSE,即指定的地址正在使用,主要是指定的端口号被使用了,IP地址可以被多个进程使用,但端口在同一时刻只能被一个进程使用。
套接口中port=0表示由内核指定端口号,设定sin_addr为INADDR_ANY(表示任意的意思),就有内核指定端口号。
设置端口为0的语句:
       struct socketaddr_in seeveraddr;
       serveraddr.port = 0;
设置IP的语句:
      serveraddr.sin_addr = htonl(INADDR_ANY);

0 0
原创粉丝点击