套接字socket---介面函式
建立套接字
socket系統呼叫建立乙個套接字,並返回乙個描述符,該描述符可以用來訪問這個套接字。建立的套接字是一條通訊鏈路的乙個端點。
#include
#include
intsocket( int domain, int type, int protocol);
套接字位址
structsockaddr_un
structsockaddr_in
命名套接字
要想讓通過socket呼叫建立的套接字可以被其他程序使用,伺服器程式必須給套接字命名,這樣af_unix套接字才會關聯到乙個檔案系統的路徑名上,af_inet套接字關聯到乙個ip的埠上。
bind呼叫把引數address中的位址分配給檔案描述符socket關聯的未命名套接字,位址長度由address_len來傳遞。
#include
intbind(int socket, const struct sockaddr* address, size_t address_len);
建立套接字佇列
為了能夠在套接字上接受進入的連線,伺服器程式必須建立乙個佇列來保持未處理的請求,它用listen系統呼叫來完成這一工作。
#include
intlisten( int socket, int backlog);
當伺服器正忙於處理乙個客戶請求時,後續的客戶連線放入佇列等待處理。函式執行成功返回0,失敗返回-1.
套接字佇列中,等待處理的進入連線的個數最多不能超過backlog這個數字,多出的連線請求將被拒絕,導致客戶連線失敗。
接受連線
一旦伺服器程式建立並命名了套接字之後,就可以通過accept系統呼叫來等待客戶建立對該套接字的連線。
#include
intaccept( int socket, struct sockaddr* address, size_t* address_len);
accept函式只有當客戶程式試圖連線到由socket引數指定的套接字上時才返回,否則將一直阻塞。
accept函式將建立乙個新的套接字來與該客戶通訊,並且返回新套接字的描述符,新套接字的型別與伺服器監聽套接字一致。
請求連線
客戶程式通過在乙個未命名套接字與伺服器監聽套接字之間建立連線,以此來連線到伺服器。
#include
intconnect( int socket, struct sockaddr* address, size_t* address_len);
引數socket指定的套接字將連線到引數address指定的伺服器套接字,address指向的結構長度由引數address_len指定。
如果連線不能立刻建立,connect呼叫將阻塞一段不確定的超時時間。一旦超時時間到達,連線將被放棄,connect呼叫失敗。
socket套接字程式設計函式
呼叫socket函式建立套接字 呼叫bind函式分配ip位址和埠 呼叫listen函式轉為可接收請求狀態 呼叫accept函式受理連線請求 include 成功時返回檔案描述符,失敗時返回 1 int socket int domain,int type,int protocol 協議族 proto...
使用socket 函式建立套接字
在linux中,一切都是檔案,除了文字檔案 原始檔 二進位制檔案等,乙個硬體裝置也可以被對映為乙個虛擬的檔案,稱為裝置檔案。例如,stdin 稱為標準輸入檔案,它對應的硬體裝置一般是鍵盤,stdout 稱為標準輸出檔案,它對應的硬體裝置一般是顯示器。對於所有的檔案,都可以使用 read 函式讀取資料...
套接字 Socket 定義
套接字介面可分為三類 公認埠 註冊埠 動態和 或私有埠 套接字,簡單的說就是通訊的兩方的一種約定,用套接字中的相關函式來完成通訊過程 應用層通過傳輸層進行資料通訊時,tcp和udp會遇到同時為多個應用程式程序提供併發服務的問題。多個tcp連線或多個應用程式程序可能需要通過同乙個 tcp協議埠傳輸資料...