select-function

    -2熱度

    2回答

    我在c中構建代理服務器,我試圖瞭解select()函數。我完成了代碼,以便從客戶端建立連接,然後提取Web地址,以便可以建立另一個連接以連接到實際的Web服務器。該頁面然後由代理接收並返回給客戶端。 據我所知,select()將允許這處理多個客戶端請求,但我不明白它是如何幫助(或更確切地說如何實現)到Web服務器的第二個連接。根據我的理解,我將不再需要一個while循環來繼續從Web服務器接收數據

    3熱度

    2回答

    我正在編寫一個跨平臺的庫,它模擬套接字行爲,在(App-> mylib->套接字)之間具有附加功能。 我希望它是最透明的可能的程序員,所以元像select和poll必須用這個LIB相應的工作。 問題是,當數據變得可用(例如)在真實套接字中時,它將不得不經過大量處理,所以如果選擇指向真實套接字fd,應用程序將被阻塞很多時間。我希望select/poll只在數據準備好被使用時解鎖(在我的lib完成所有

    0熱度

    1回答

    此程序是(我相信)select()(在Debian for ARM上)的直接應用程序。 XBEEDEVICE指向一個串行端口。串行端口存在,並且ic連接到設備。 問題是,即使有數據收到,select()也會返回0。我暫時註釋掉了最後的'else',程序打印出TIMEOUT,然後是遠程設備返回的字符串。 int main(int argc, char **argv) { int fd, c

    2熱度

    1回答

    在服務器/客戶端設置中,我有一個服務器在不同套接字的少數(當前爲4)處與客戶端連接。目前,我使用select來計算set_size,但是在使用FD_SETSIZE之前,上限是多少? 下面是一些代碼示例來說明這一點。首先建立一套: FD_ZERO(&set); FD_SET(socket1, &set); FD_SET(socket2, &set); FD_SET(socket3, &set)

    1熱度

    1回答

    我試圖在veth接口上接收ping數據包。但我在接收方看不到任何東西。當我執行TCP轉儲時,我可以看到數據包。這是我的代碼。 s_int32_t checkingRawSocket(void) { int sockfd; char ifName[IFNAMSIZ]; fd_set readfds; int m_sd; int retVal;

    2熱度

    2回答

    如果我在select()調用中使用非阻塞套接字而不是在select()調用中使用阻塞套接字,我的程序在行爲上會有何不同?

    0熱度

    1回答

    當某些數據包按預期到達UDP端口時,select函數返回+ ve值。但是這隻發生一次。從第二次在UDP端口接收到數據包時,該功能沒有響應。但是,如果我在同一個套接字上執行sendto(),那麼在第一次接收到UDP數據包後,select函數會響應。這種行爲的原因是什麼? 的代碼: while (true) { IP_FD_ZERO (&readFD); IP_FD_SET (i

    1熱度

    1回答

    我是套接字編程的新手,我已經介紹了select()系統調用。我的問題是,可以說我正在用C編寫一個服務器(我試圖這樣做),並且我想在我的實現中使用select()調用來練習。我試圖編寫一個從客戶端接收信息的服務器,所以我的方法是使用select(),然後是read()並輸出信息。 根據我已閱讀的文檔select()返回數字文件描述符在輸入集準備I/O。我的問題是,如何知道哪個原始集合中的文件描述符是

    3熱度

    2回答

    我想寫一個實驗性的客戶端/服務器程序來證明寫入失敗或發送緩衝區已滿時阻止。 基本上,我在發件人程序上有一個無限循環,我使用select()來檢查是否可以在緩衝區上寫入(我認爲這意味着套接字緩衝區未滿),如果我可以在緩衝區上寫入比我寫()一個字符。當FD_ISSET(sockfd,& writefds)爲假(我無法在緩衝區寫入,因爲它已滿)時,循環中斷。 開始閱讀前,接收器程序正在睡眠一分鐘()。我

    1熱度

    2回答

    我正在寫一個UDP服務器/客戶端程序,服務器通過一個固定窗口大小的單個端口向客戶端發送數據包,並且客戶端將爲每個收到的數據包發回ack數據包。現在我想讓服務器處理丟包的情況。通過一些谷歌搜索,似乎我應該使用ALARM或SELECT。我當然不希望發送一個數據包,等待確認或超時,然後發送另一個數據包,但SELECT會在超時期間阻塞調用功能,所以我認爲它不好。 ALARM也不好,因爲一個程序只能有一個A