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