Re: [問題] winsocket程設: 如何停止server?

看板C_and_CPP作者 (ロックマン)時間15年前 (2009/08/29 01:19), 編輯推噓2(206)
留言8則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《rokuman (ロックマン)》之銘言: : 小弟我練習寫了一個簡單的echo server,在while(1)裡面產生thread處理client的 : request,卻不知道要用那種狀態判斷跳出迴圈,現在都只能按ctrl+c強迫程式結束... 下面貼上一段改良過後的虛擬碼,參數都省略 //關閉server int shutdown1(){ running = FALSE; //closesocket(serverSocket); //關掉serverSocket可以讓accept跳出來 //WSACleanup(); } //接受連線 int listening(){ while(running){ accept(); //程式會停在這直到有client連線 newThread(); } finalize(); } 現在碰到的問題是程式本來就會在accept時停住,除非我把shutdown1()的第二三行註解 取消,accpet的命令才會在我下shutdown1()時被強制中斷再跑回while()去檢查旗標, 反之不取消註解的話,在執行shutdown1()後還要有一個client來連線才能跳出while 一般的server設計shutdown這種命令時也是用類似的方式實作嗎? 還是有什麼檢查socket狀態之類的寫法? -- 先感謝您的回答... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.170.122.180

08/29 01:31, , 1F
listen沒滿前 都可以accept才對 不過不知道你怎麼設定
08/29 01:31, 1F

08/29 02:06, , 2F
抱歉沒說清楚,我說停住是指程式流程因為accept停在等待連
08/29 02:06, 2F

08/29 02:07, , 3F
線的階段,只要一直停在這個階段就沒機會去檢查running
08/29 02:07, 3F

08/29 02:08, , 4F
至於accept的機能一直都是正常的
08/29 02:08, 4F

08/29 12:33, , 5F
這個部份一般都是使用non-blocking來處理accept的部份
08/29 12:33, 5F

08/29 12:33, , 6F
其實你可以使用select設計一個具備timeout的accept
08/29 12:33, 6F

08/29 12:34, , 7F
或者就要shutdown時自己連自己吧 不過這方法不太好就是
08/29 12:34, 7F

08/29 13:36, , 8F
感謝, 立刻研究看看.
08/29 13:36, 8F
文章代碼(AID): #1Ac16RCM (C_and_CPP)
文章代碼(AID): #1Ac16RCM (C_and_CPP)