看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
godman362:請教一下,如果fd_set的內容每次迴圈都重設的話 07/31 13:42
godman362:那麼server accept到的client不就會被清光嗎? 07/31 13:43
visor:記錄起來就好啦 不然你也可以用一個暫時性的 fd_set 07/31 14:26
godman362:嗯,這樣我明白了,謝謝您的指點 07/31 15:49