bind函式主要用於套接字通訊的伺服器端,用於繫結伺服器要監聽的位址和埠,所需要的標頭檔案
#include
#include
函式原型
int bind(int socket,const struct sockaddr* address,socklen_t address_len);
socket是你建立的套接字描述符,
address是伺服器端的位址和埠,常見的使用方法如下
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)
/* 繫結套介面 */
if(-1 == (bind(server_socket_fd,(struct sockaddr*)&server_addr,sizeof(server_addr))))
返回值
當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);
套接字通訊
利用三元組 ip位址,協議,埠 就可以標識網路的程序 socket即是一種特殊的檔案,一些socket函式就是對其進行的操作 讀 寫io 開啟 關閉 socket是 open write read close 模式的一種實現,那麼socket就提供了這些操作對應的函式介面 tcp通訊中的socket...
套接字通訊
套接字家族的名字 af unix unix一切皆檔案,基於檔案的套接字呼叫的就是底層的檔案系統來取資料,兩個套接字程序執行在同一機器,可以通過訪問同乙個檔案系統間接完成通訊 套接字家族的名字 af inet 還有af inet6被用於ipv6,還有一些其他的位址家族,不過,他們要麼是只用於某個平台,...
Linux程序間通訊 套接字
socket 也是一種程序間的通訊機制,不過它與其他通訊方式主要的區別是 它可以實現不同主機間的程序通訊。乙個套介面可以看做是程序間通訊的端點 endpoint 每個套介面的名字是唯一的 其他程序可以訪問,連線和進行資料通訊。套介面 socket 程式設計是實現 linux 系統和其他大多數作業系統...