- 論壇徽章:
- 1
|
一個(gè)client程序:
select 超時(shí)監(jiān)聽(tīng) sockfd套接字 和 STDIN_FILENO標(biāo)準(zhǔn)輸入:若sockfd可讀則接收server報(bào)文;若標(biāo)準(zhǔn)輸入可讀(按下回車(chē)),則開(kāi)始用fgets/fscanf等函數(shù)從標(biāo)準(zhǔn)輸入捕獲字符后發(fā)送給server;若select 2秒超時(shí),client發(fā)送一次心跳包給server。要求不能開(kāi)其他的進(jìn)程或線程,也不能使用定時(shí)器和信號(hào),即單線程client。
現(xiàn)在問(wèn)題來(lái)了,在使用fgets/fscanf時(shí),會(huì)阻塞select函數(shù),這樣一來(lái)client就無(wú)法進(jìn)入超時(shí)流程發(fā)送心跳包;若將標(biāo)準(zhǔn)輸入設(shè)置為非阻塞,那么fgets/fscanf立即返回,捕獲的內(nèi)容為空,達(dá)不到要求。
請(qǐng)問(wèn),有沒(méi)有一種方法能讓程序一邊等待fgets/fscanf的捕獲,一邊循環(huán)非阻塞執(zhí)行select函數(shù)? |
|