socketpair 雙向傳輸

2021-07-24 03:14:11 字數 1341 閱讀 7233

socketpair會建立兩個網路檔案系統的描述符socket[0]、socket[1] ,儲存在乙個二元陣列中。用於雙向的資料傳輸。

#define socket_buffer_size      (32768u)

int sockets[2];

int buffersize = socket_buffer_size;

// 1.建立socketpair

socketpair(af_unix, sock_seqpacket, 0, sockets);

// 2.設定fd

setsockopt(sockets[0], sol_socket, so_sndbuf, &buffersize, sizeof(buffersize));

setsockopt(sockets[0], sol_socket, so_rcvbuf, &buffersize, sizeof(buffersize));

setsockopt(sockets[1], sol_socket, so_sndbuf, &buffersize, sizeof(buffersize));

setsockopt(sockets[1], sol_socket, so_rcvbuf, &buffersize, sizeof(buffersize));

.類似於一根雙向的管道,socket[0]、socket[1] 都可讀寫:

—— 在socket[0]寫入,只能在socket[1]讀出

—— 也可在 socket[0] 讀取 socket[1] 寫入的資料

.此特性有效的解決了以往的資料傳輸只能在client端發起請求的操作

由於其雙向傳輸是基於檔案描述符的,所以只能應用於單個程序或者有派生關係的父子程序或者多執行緒中,而在沒有派生關係的多程序中則無法很方便的應用。

想要在沒有派生關係的多程序中使用soketpair就涉及到檔案描述符在不同程序中的轉換了。

#include 

#include

#include

#include /* see notes */

#include

#define socket_buffer_size (32768u)

/* 參考:

* frameworks\native\libs\input\inputtransport.cpp

*/void *function_thread1 (void *arg)

return null;

}int main(int argc, char **argv)

}

TCP雙向傳輸

tcp雙向傳輸 客戶端通過鍵盤向服務端傳送字串,服務端接收到客戶端發來的字串進行翻轉後,傳送給客戶端。思路 1.客戶端 源 鍵盤錄入 目的 網路輸出流 操作字串 選擇字元流 2.伺服器端 源 輸入流 目的 輸出流 3.為提高效率,加入緩衝 伺服器端步驟 1.建立伺服器socket服務 2.獲取客戶端...

SocketPair學習筆記

在看使用libevent的時候,它裡面有乙個建立socketpair對的函式 先分析一下什麼是socketpair.首先搞明白,在我們平時單個客戶端和服務端tcp通訊的時候,需要三個socket才能做到能夠全雙工通訊,什麼?三個,是的沒錯 乙個客戶端client 乙個服務端server,乙個acce...

socketpair的用法和理解

socketpair 函式的宣告 include include int socketpair int d,int type,int protocol,int sv 2 socketpair 函式用於建立一對無名的 相互連線的套接子。如果函式成功,則返回0,建立好的套接字分別是sv 0 和sv 1 ...