Socket : 兩個(gè)端點(diǎn)之間的單向連接, 因此它們通常情況下都是成對(duì)出現(xiàn)的: 一個(gè)用于讀, 一個(gè)用于寫. 類似于 UNIX 系統(tǒng)上的幾乎所有其他資源, Socket 也表示為文件, 并且在創(chuàng)建時(shí)會(huì)被分配文件描述符
BSD Socket 完全使用 C 語(yǔ)言實(shí)現(xiàn), 并且可以在 Objective-C 代碼中使用. 原始的 Socket 無(wú)法訪問操作系統(tǒng)內(nèi)建的網(wǎng)絡(luò)特性(比如系統(tǒng)范圍的 VPN). CFNetwork 對(duì) BSD Socket 的封裝可以激活設(shè)備的無(wú)線電, 因此在幾乎所有場(chǎng)景中, 我們建議使用 CFNetwork 而非 BSD Socket
要想創(chuàng)建 Socket, 請(qǐng)調(diào)用 socket(int addressFamily, int type, int protocol)并提供 socket.h 中定義的網(wǎng)絡(luò)域盲泛、Socket 類型與協(xié)議枚舉值. 通常情況下, 對(duì)于 iOS 應(yīng)用發(fā)出的流量, addressFamily 值為 IPv4(AF_INET) 或 IPv6(AF_INET6); 不過(guò), 也可以打開到本地文件的 Socket. Socket 類型通常會(huì)被設(shè)定為流(SOCK_STREAM)或數(shù)據(jù)包(SOCK_DGRAM). 這兩個(gè)值非常重要, 因?yàn)檎{(diào)用 socket() 時(shí)常常會(huì)提供值為 0 的協(xié)議, 這表示系統(tǒng)可以通過(guò)域和類型值自動(dòng)選擇恰當(dāng)?shù)膮f(xié)議. 對(duì)于流式 Socket 來(lái)說(shuō), 自動(dòng)選擇的值為傳輸控制協(xié)議(IPPROTO_TCP); 對(duì)于數(shù)據(jù)包 Socket 來(lái)說(shuō), 自動(dòng)選擇的值為用戶數(shù)據(jù)報(bào)協(xié)議(IPPROTO_UDP)