簡體   English   中英

阻止來自 TCP 套接字的數據流

[英]block data flow from a TCP socket

我正在使用 libsoccr,它允許檢查點/恢復 TCP 連接。 這是我嘗試使用它的方式:

/* some code to initialize and connect the socket */

#define max 10000000
struct libsoccr_sk *so;
struct libsoccr_sk_data data;
int sockfd, dsize, size;
char *buff = (char *)malloc(MAX * sizeof(char));

/* some code to fill the buffer */

write(sockfd, buff, MAX);
so = libsoccr_pause(sockfd);
dsize = libsoccr_save(so, &data, sizeof(data));

/* some code */

function libsoccr_save(so, &data, sizeof(data))返回 -6。

我重新閱讀了 libsoccr 的文檔,發現“在調用libsoccr_pause(sockfd)之前,調用者必須阻止此套接字的任何數據流”。 我查看了源代碼,發現隊列長度是用ioctl(sockfd, SIOCOUTQ, &size)得到的,后來,隊列本身的內容是用ret = recv(sockfd, buf, size+1, MSG_PEEK | MSG_DONTWAIT) 使用 gdb,即使隊列不為空,我似乎總是得到ret = 0 ,這肯定是因為我沒有阻塞套接字的數據流,但我不知道該怎么做。 那么問題來了,如何才能阻塞一個socket的數據流呢?

阻止套接字數據流的一個好方法是使用“plug qdisc”。 所有文檔都可以在這里找到: https://www.infradead.org/~tgr/libnl/doc/api/group__qdisc__plug.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM