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 這種約定,一台計算機可以接收其他計算機...