您好,登錄后才能下訂單哦!
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.通用數據讀寫
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參數,并且在調用過程中更新
}
struct iovec{
void *iov_base; //內存起始地址
size_t iov_len; //這塊內存的長度
}
4.帶外標記
帶外數據何時到來?
傳輸層協議使用帶外數據(out-of-band,OOB)來發送一些重要的數據,如果通信一方有重要的數據需要通知對方時,協議能夠將這些數據快速地發送到對方。為了發送這些數據,協議一般不使用與普通數據相同的通道,而是使用另外的通道。linux系統的套接字機制支持低層協議發送和接受帶外數據。但是TCP協議沒有真正意義上的帶外數據。為了發送重要協議,TCP提供了一種稱為緊急模式(urgent mode)的機制。TCP協議在數據段中設置URG位,表示進入緊急模式。接收方可以對緊急模式采取特殊的處理。很容易看出來,這種方式數據不容易被阻塞,并且可以通過在我們的服務器端程序里面捕捉SIGURG信號來及時接受數據。這正是我們所要求的效果。
int sockatmark(int sockfd)
返回1的時候,我們利用帶有MSG_OOB標志的recv調用來接收帶外數據
如果不是返回0
5.地址信息函數
一個連接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()
這一塊暫時不寫了
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。