socket 函式介紹

2021-09-18 05:48:26 字數 1774 閱讀 8029

socket()函式介紹

socket函式介紹

函式原型

domain

type

protocol

errno

示例函式原型

socket()函式的原型如下,這個函式建立乙個協議族為domain、協議型別為type、協議編號為protocol的套接字檔案描述符。如果函式呼叫成功,會返回乙個標識這個套接字的檔案描述符,失敗的時候返回-1。

#include

#include

int socket(int domain, int type, int protocol);12

3domain

函式socket()的引數domain用於設定網路通訊的域,函式socket()根據這個引數選擇通訊協議的族。通訊協議族在檔案sys/socket.h中定義。

表1 domain的值及含義

表2 type的值及含義

名稱    含義

sock_stream    tcp連線,提供序列化的、可靠的、雙向連線的位元組流。支援帶外資料傳輸

sock_dgram    支援udp連線(無連線狀態的訊息)

sock_seqpacket    序列化包,提供乙個序列化的、可靠的、雙向的基本連線的資料傳輸通道,資料長度定常。每次呼叫讀系統呼叫時資料需要將全部資料讀出

sock_raw    raw型別,提供原始網路協議訪問

sock_rdm    提供可靠的資料報文,不過可能資料會有亂序

sock_packet    這是乙個專用型別,不能呢過在通用程式中使用

並不是所有的協議族都實現了這些協議型別,例如,af_inet協議族就沒有實現sock_seqpacket協議型別。

protocol

函式socket()的第3個引數protocol用於制定某個協議的特定型別,即type型別中的某個型別。通常某協議中只有一種特定型別,這樣protocol引數僅能設定為0;但是有些協議有多種特定的型別,就需要設定這個引數來選擇特定的型別。

型別為sock_stream的套接字表示乙個雙向的位元組流,與管道類似。流式的套接字在進行資料收發之前必須已經連線,連線使用connect()函式進行。一旦連線,可以使用read()或者write()函式進行資料的傳輸。流式通訊方式保證資料不會丟失或者重複接收,當資料在一段時間內任然沒有接受完畢,可以將這個連線人為已經死掉。

sock_dgram和sock_raw 這個兩種套接字可以使用函式sendto()來傳送資料,使用recvfrom()函式接受資料,recvfrom()接受來自制定ip位址的傳送方的資料。

sock_packet是一種專用的資料報,它直接從裝置驅動接受資料。

errno

函式socket()並不總是執行成功,有可能會出現錯誤,錯誤的產生有多種原因,可以通過errno獲得:

表3 errno的值及含義

值    含義

eacces    沒有許可權建立制定的domain的type的socket

eafnosupport    不支援所給的位址型別

einval    不支援此協議或者協議不可用

emfile    程序檔案表溢位

enfile    已經達到系統允許開啟的檔案數量,開啟檔案過多

enobufs/enomem    記憶體不足。socket只有到資源足夠或者有程序釋放記憶體

eprotonosupport    制定的協議type在domain中不存在

其他    

示例建立乙個流式套接字:

int sock = socket(af_inet, sock_stream, 0);

socket 函式介紹

include include int socket int domain,int type,int protocol 含義 名稱含義 pf unix,pf local 本地通訊 pf x25 itu t x25 iso 8208協議 af inet,pf inet ipv4 internet協議 ...

socket 函式介紹

socket 函式的原型如下,這個函式建立乙個協議族為domain 協議型別為type 協議編號為protocol的套接字檔案描述符。如果函式呼叫成功,會返回乙個標識這個套接字的檔案描述符,失敗的時候返回 1。include include intsocket int domain,int type...

socket套接字介紹

由於最近要完成自己的專案作業,其中需要使用socket進行網路通訊。所以簡單了解了一些這方面的知識,希望可以拋磚引玉。socket 的原意是 插座 在計算機通訊領域,socket 被翻譯為 套接字 它是計算機之間進行通訊的一種約定或一種方式。通過 socket 這種約定,一台計算機可以接收其他計算機...