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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章