Re: [問題] select read & write同一fd
※ 引述《godman362 (青)》之銘言:
: 請問各位
: 就是我目前要對一個Socket fd做動作
: 由於他是在Server端,而且這個fd要可以做讀、寫的動作
: 所以我採用select做出Async I/O的作業方式
: 那以下簡略描述一下目前的想法:
: int Select_Check;
: /*
: * Socket 設定
: */
: ......
: ......
: ......
: Sock.Bind();
: Sock.Listen(10);
: //FD_SET(Sock, &ReadSet);
: //FD_SET(Sock, &WriteSet); //拿進去 while 裡面作
: while (1)
: {
// select 每次都會重設 ReadSet WriteSet
// 所以要在 select 之前都要初始化這兩個變數
FD_ZERO(&ReadSet);
FD_ZERO(&WriteSet);
FD_SET(Sock, &ReadSet);
FD_SET(Sock, &WriteSet);
: Select_Check = select(maxfd, &ReadSet, &WriteSet, NULL, Timeout);
: /*
: * 以下進入問題,不多做其他的判斷及處理
: */
: if (Select_Check) {
// Select_Check 會有三種回傳值
// > 0 多少個 io 有資料可以處理
// == 0 timeout
// < 0 其他錯誤 , 有可能是收到 signal
: .........
: .........
: .........
: }
: }
: 我想請問的是黃色區塊的部份
: 這個部份,我是應該直接去做FD_ISSET的判斷嗎?
: 像是如下:
: if (FD_ISSET(Sock, &ReadSet) {
: .......
: }
: else if (FD_ISSET(Sock, &WriteSet) {
: .......
: }
: else {
: .......
: }
: 我想問一下,上述的寫法會不會有問題?
是的這邊就這樣判斷就好
: 因為我不懂select是用什麼去判別資料是否準備好
: 還請各位先進指點一番,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.160.66
推
07/31 13:42, , 1F
07/31 13:42, 1F
→
07/31 13:43, , 2F
07/31 13:43, 2F
→
07/31 14:26, , 3F
07/31 14:26, 3F
推
07/31 15:49, , 4F
07/31 15:49, 4F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章