以TCP協議爲例,UNIX的相關API服務器
int socket(int domain , int type , int protocol);
根據指定的地址族,數據類型,協議來分配一個socket的描述字以及所佔用的資源。dom
domain:協議族,常見的有AF_INET、AF_INET六、AF_LOCAL、AF_ROUTE,其中AF_INET表明ipv4地址socket
type:socket類型,常見的socket類型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等spa
protocol:協議。常見的協議有IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等blog
返回值:返回一個套接口描述符0 or 1 or 2,若是出錯,則返回-1。 接口
int bind(int sockfd , const struct sockaddr * addr , socklen_t addrlen);
把一個地址族中的特定地址賦給socketip
sockfd:socket描述字,便是sock引用資源
addr:要綁定給sockfd的協議地址it
addrlen:協議地址的長度class
一般服務器在啓動時要綁定一個衆所周知的IP地址和端口,用於提供服務,客戶經過它就能夠鏈接到服務器。可是客戶端與之不一樣,客戶端是在connect():時自動分配一個端口。這就是爲何客戶沒有調用bind();的操做而服務器在listen();前須要bind();的操做。
int listen(int sockfd , int backlog);
監聽socket
sockfd:要監聽的socket描述字
backlog:相應socket能夠排隊的最大鏈接個數
int connect(int sockfd , const struct sockaddr *addr , socklen_t addrlen);
鏈接某個socket
sockfd:某個客戶端的描述字
addr:服務器的socket地址
addrlen:socket地址的長度
int accept(int sockfd , const struct sockaddr *addr , socklen_t *addrlen);
TCP服務器監聽到用戶請求後,調用accept();接收請求
sockfd:服務器的socket描述字
addr:服務器的socket地址
addrlen:服務器socket地址的長度
· 返回值類型:返回的是一個不一樣的socket,這個socket保存的是你客戶端的socket信息
ssize_t read(int sockfd , void *buf , size_t count);
讀取socket內容
sockfd:socket描述字
buf:緩衝區
count:緩衝區的長度
ssize_t write(int sockfd , void *buf , count);
寫入socket內容
sockfd:socket描述字
buf:緩衝區
count:緩衝區長度
int close(int sockfd);
標記socket爲關閉,使相應socket描述字的引用計數爲-1,當引用計數爲0時,觸發TCP客戶端向服務器發送終止鏈接請求