socket函數解析
概念:
每個進程的進程空間里都有一個socket描述符表。套接字描述符表屬于一個進程,而socket地址結構位于操作系統的內核緩沖。
函數原型
#include <sys/socket.h>int socket(int domain, int type, int protocol);
函數參數
family參數
默認選擇AF_INET
名稱 | 目的 |
---|---|
AF_INET | IPv4網絡通信 |
AF_INET6 | IPv6網絡通信 |
AF_PACKET | 鏈路層通信 |
AF_UNIX, AF_LOCAL | 本地通信 |
type參數
protocol參數
- 可設置為0,表示選擇當前family和type組合下protocol的系統默認值
IPPROTO_TCP | IPPTOTO_UDP | IPPROTO_SCTP | IPPROTO_TIPCTCP |
---|---|---|---|
TCP傳輸協議 | UDP傳輸協議 | STCP傳輸協議 | TIPC傳輸協議 |
用法
如果我們在新建套接字的時候使用socket(PF_INET,SOCK_STREAM,0),那么內核就會默認給你把protocol修正為IPPROTO_TCP。
int lst_fd = -1;lst_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (lst_fd < 0) {perror("socket error");return -1;}