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