#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
domain:
??? AF_INET 這是大多數用來產生socket的協議,使用TCP或UDP來傳輸,用IPv4的地址
??? AF_INET6 與上面類似,不過是來用IPv6的地址
??? AF_UNIX 本地協議,使用在Unix和Linux系統上,一般都是當客戶端和服務器在同一臺及其上的時候使用
type:
??? SOCK_STREAM 這個協議是按照順序的、可靠的、數據完整的基于字節流的連接。這是一個使用最多的socket類型,這個socket是使用TCP來進行傳輸。
??? SOCK_DGRAM 這個協議是無連接的、固定長度的傳輸調用。該協議是不可靠的,使用UDP來進行它的連接。
??? SOCK_SEQPACKET?該協議是雙線路的、可靠的連接,發送固定長度的數據包進行傳輸。必須把這個包完整的接受才能進行讀取。
??? SOCK_RAW socket?類型提供單一的網絡訪問,這個socket類型使用ICMP公共協議。(ping、traceroute使用該協議)
??? SOCK_RDM 這個類型是很少使用的,在大部分的操作系統上沒有實現,它是提供給數據鏈路層使用,不保證數據包的順序
protocol:
??? 傳0 :表示使用默認協議。
返回值:
??? 成功:返回指向新創建的socket的文件描述符
? ? 失敗:返回-1,設置errno
解釋分析:
socket()打開一個網絡通訊端口,
如果成功的話,就像open()一樣返回一個文件描述符,應用程序可以像讀寫文件一樣用read/write在網絡上收發數據,
如果socket()調用出錯則返回-1。
對于IPv4,domain參數指定為AF_INET。
對于TCP協議,type參數指定為SOCK_STREAM,表示面向流的傳輸協議。
如果是UDP協議,則type參數指定為SOCK_DGRAM,表示面向數據報的傳輸協議。
protocol參數的介紹從略,指定為0即可