創(chuàng)建套接字
socket(3SOCKET) 調(diào)用創(chuàng)建指定系列和指定類型的套接字。
s = socket(family, type, protocol);
如果未指定協(xié)議,則系統(tǒng)將選擇支持所需套接字類型的協(xié)議。將返回套接字句柄。套接字句柄即為文件描述符。
family由 sys/socket.h 中定義的一個常量指定。名為 AF_suite 的常量指定要在解釋名稱時使用的地址格式:
AF_APPLETALK: Apple Computer Inc. Appletalk 網(wǎng)絡(luò)
AF_INET6: Internet IPv6 和 IPv4 系列
AF_INET: 僅 Internet IPv4 系列
AF_PUP: Xerox Corporation PUP internet
AF_UNIX: UNIX 文件系統(tǒng)
其中,套接字類型在 sys/socket.h中定義。AF_INET6、AF_INET 和 AF_UNIX支持SOCK_STREAM、SOCK_DGRAM 或 SOCK_RAW 這些類型。
以下示例創(chuàng)建 Internet 系列的流套接字:
s = socket(AF_INET6, SOCK_STREAM, 0);
此調(diào)用生成流套接字。TCP 協(xié)議提供底層通信。在大多數(shù)情況下,將 protocol參數(shù)設(shè)置為缺省值 0??梢灾付ㄈ笔f(xié)議之外的其他協(xié)議,如高級套接字主題中所述。
通俗來講,即 ai_family參數(shù)指定調(diào)用者期待返回的套接口地址結(jié)構(gòu)的類型。
它的值包括三種:AF_INET,AF_INET6和AF_UNSPEC。
如果指定AF_INET,那么函數(shù)就不能返回任何IPV6相關(guān)的地址信息;
如果僅指定了AF_INET6,則就不能返回任何IPV4地址信息。
AF_UNSPEC則意味著函數(shù)返回的是適用于指定主機(jī)名和服務(wù)名且適合任何協(xié)議族的地址。
如果某個主機(jī)既有AAAA記錄(IPV6)地址,同時又有A記錄(IPV4)地址,那么AAAA記錄將作為sockaddr_in6結(jié)構(gòu)返回,而A記錄則作為sockaddr_in結(jié)構(gòu)返回;