2.UDP數據讀寫
2.1ssize_t recvfrom(int sockfd,const void buf,size_t len,int flags,struct socketaddr src_addr,socklen_t addrlen);
2.2 ssize_t sendto (int sockfd,const void buf,size_t len,int flags,const struct sockaddr* dest_addr,socklen_t addrlen);
注:recvfrom/sendto 系統調用也能夠用於面向鏈接(STREAM)的socket的數據讀寫,只須要把最後兩個參數設置爲NULL
3.通用數據讀寫linux
ssize_t recvmsg(int sockfd,struct msghdr msg,int flags)
ssize_t sendmsg(int sockfd,struct msghdr msg,int flags);服務器
struct msghdr{
void msg_name; //socket地址
socklen_t msg_namelen; // socket地址長度
struct iovec msg_iov; //分散的內存塊
int msg_iovlen; //分散內存塊的數量
void* msg_control; //指向輔助數據的起始位置
socklen_t msg_cintrollen; //輔助數據的大小
int msg_flags; //複製函數中的flags參數,而且在調用過程當中更新
}socket
struct iovec{
void *iov_base; //內存起始地址
size_t iov_len; //這塊內存的長度
}ide
4.帶外標記函數
帶外數據什麼時候到來?
傳輸層協議使用帶外數據(out-of-band,OOB)來發送一些重要的數據,若是通訊一方有重要的數據須要通知對方時,協議可以將這些數據快速地發送到對方。爲了發送這些數據,協議通常不使用與普通數據相同的通道,而是使用另外的通道。linux系統的套接字機制支持低層協議發送和接受帶外數據。可是TCP協議沒有真正意義上的帶外數據。爲了發送重要協議,TCP提供了一種稱爲緊急模式(urgent mode)的機制。TCP協議在數據段中設置URG位,表示進入緊急模式。接收方能夠對緊急模式採起特殊的處理。很容易看出來,這種方式數據不容易被阻塞,而且能夠經過在咱們的服務器端程序裏面捕捉SIGURG信號來及時接受數據。這正是咱們所要求的效果。rest
int sockatmark(int sockfd)內存
返回1的時候,咱們利用帶有MSG_OOB標誌的recv調用來接收帶外數據ci
若是不是返回0get
5.地址信息函數it
一個鏈接socket的本端socket地址和遠端的socket地址
int getsocketname(int sockfd,struct sockaddr address,socklen_t address_len)
int getpeername(int sockfd,struct sockaddr address,socklen_t address_len)
6.socket選項
fcntl系統調用是控制文件描述符屬性通用POSIX方法
專門設置socket文件描述符屬性的方法
int getsockopt(int sockfd,int level,int option_name,void option_value,socklen_t restrict option_len)
int setsockopt()
這一塊暫時不寫了