C語(yǔ)言 socket()函數(shù)
socketO函數(shù)用于創(chuàng)建通信的套接字,并返回該套接字的文件描述符。其原型如下:
int socket(int domain, int type. int protocol);
其中:
(1)參數(shù)domain指定了通信域,用于選擇通信協(xié)議族,其取值情況如表所示。
名稱(chēng) | 含義 | 擠注 |
PF—UNI乂. PF_LOCAL | 本地通信 | “man7UNI乂"可以獲得具體幫助信息 |
PF_INET | IPv4協(xié)議 | “man6ip”可以獲得具體幫助信息 |
PF_INET6 | IPv6協(xié)議 | - |
PF_IP乂 | Novell公司的IP乂協(xié)議 | - |
PF_NETUNK | 與內(nèi)核間的接口 | “man 7 netlink”可以獲得具體幫助信息 |
PF _乂 25 | ITU-T 乂.25 / ISO-8208 | “man 7 x25” 可以獲得具體幫助信息 |
PF_AX25 | 無(wú)線(xiàn)A乂.25協(xié)議 | - |
PF_ATAAPVC | 訪問(wèn)原始ATM的PVC | - |
PF_APPLETALK | 蘋(píng)果公司的Appletdlk協(xié)議 | "man 7 ddp"可以獲得具體幫助信息 |
PF_PACKET | 底層包接口 | “man 7 packet”獲得具體幫助信息 |
(2)參數(shù)type用于指定套接字的類(lèi)型。套接字類(lèi)型除了前面提到的流套接字、數(shù)據(jù)報(bào)套接字及原始套接字外,還有其他的幾種類(lèi)型,如表所示。
套接字類(lèi)鍛 | 說(shuō)明 |
SOCK _ STREAM | 提供有序、可靠、雙向及基于連接的字節(jié)流。支持帶外傳輸機(jī)制 |
SOCK _ DGRAM | 支持?jǐn)?shù)據(jù)報(bào) |
SOCK _ SEQPACKET | 提供有序、可靠、雙向基于連接的數(shù)據(jù)報(bào)通信 |
SOCK _ RAW | 提供對(duì)原始網(wǎng)絡(luò)協(xié)議的訪問(wèn) |
SOCK _ RDM | 提供可靠的數(shù)據(jù)報(bào)層,但是不保證有序性 |
SOCK_PACKET | 該參數(shù)已經(jīng)廢除 |
流套接字(SOCK_STREAM )與管道類(lèi)似,是一種全雙工的比特流。流套接字在發(fā)送或接收數(shù)據(jù)前必須處于連接狀態(tài)。實(shí)現(xiàn)流套接字的通信協(xié)議保證了傳輸?shù)臄?shù)據(jù)不會(huì)丟失。
(3)參數(shù)protocol用于指定套接字使用的通信協(xié)議。正常情況下,對(duì)于給定的協(xié)議族,只有單一的協(xié)議支持特定的套接字類(lèi)型。這時(shí),只要將protocol參數(shù)設(shè)置為0即可。
socket()函數(shù)常見(jiàn)的錯(cuò)誤信息:
? EACCES:創(chuàng)建指定類(lèi)型的套接字失敗。
? EAFNOSUPPORT: 不支持指定的地址族。
? EINVAL:未知協(xié)議或未知的協(xié)議族。
? EMFILE:進(jìn)程文件表溢出。
? ENFILE:達(dá)到打開(kāi)文件的系統(tǒng)限制。
? ENOBUFS或ENOMEM: 內(nèi)存不足。
? EPROTONOSUPPORT:指定的協(xié)議類(lèi)型在該域中不支持。
點(diǎn)擊加載更多評(píng)論>>