socket 函式介紹

2021-09-14 03:35:19 字數 2126 閱讀 9526

socket()函式的原型如下,這個函式建立乙個協議族為domain、協議型別為type、協議編號為protocol的套接字檔案描述符。

如果函式呼叫成功,會返回乙個標識這個套接字的檔案描述符,失敗的時候返回-1。

#include

#include

intsocket

(int domain,

int type,

int protocol)

;

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

表1 domain的值及含義

名稱含義

名稱含義

pf_unix,pf_local

本地通訊

pf_x25

itu-t x25 / iso-8208協議

af_inet,pf_inet

ipv4 internet協議

pf_ax25

amateur radio ax.25

pf_inet6

ipv6 internet協議

pf_atmpvc

原始atm pvc訪問

pf_ipx

ipx-novell協議

pf_netlink

核心使用者介面裝置

pf_packet

底層包訪問

函式socket()的引數type用於設定套接字通訊的型別,主要有socket_stream(流式套接字)、sock_dgram(資料報套接字)等。

表2 type的值及含義

名稱含義

sock_stream

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

sock_dgram

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

sock_seqpacket

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

sock_raw

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

sock_rdm

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

sock_packet

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

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

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

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

表3 errno的值及含義值含義

eacces

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

eafnosupport

不支援所給的位址型別

einval

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

emfile

程序檔案表溢位

enfile

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

enobufs/enomem

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

eprotonosupport

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

其他建立乙個tcp流式套接字:

int sock =

socket

(af_inet, sock_stream,0)

;

檢測ip衝突會用到:

int m_wirednet_sock = socket (pf_packet, sock_packet,

htons

(eth_p_arp)

;setsockopt

(m_wirednet_sock, sol_socket, so_broadcast,

&optval,

sizeof

(optval)

;

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 函式介紹 socket函式介紹 函式原型 domain type protocol errno 示例函式原型 socket 函式的原型如下,這個函式建立乙個協議族為domain 協議型別為type 協議編號為protocol的套接字檔案描述符。如果函式呼叫成功,會返回乙個標識這個套接字...

socket套接字介紹

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