[問題] 寫server時的signal處理

看板Network作者 (一路到巴西)時間20年前 (2005/05/01 01:44), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
我在寫http server的程式,因為要處理client的connection 型態,如果client的request message指定connection為persistent 時,我的server就不可以write back後立刻關掉socket。應該要 等個十秒如果client沒有動作再關socket。那我為了要處理時間 訊號就用了signal,也就是alarm(10)所產生的SIG_ALRM來產生 訊號。我的方式是在開始listen以後的迴圈裡,accept之後,也 讀到了request之後先來parse出connection type,如果是persistent 我就設alarm(10)。然後還有一個signal(SIG_ALRM,sig_alrm)去處 理SIG_ALRM訊號。我在sig_alrm裡的作法是,把一個global的integer sig設成1,代表說十秒已到,該關socket了。我的想法是等處理完 sig_alrm這個function以後,回到server迴圈裡檢查sig是不是1,是的話就 關socket。可是,系統的運作似乎是處理完sig_alrm以後,就什麼 也不做了,也就是說,process並沒有回到signal(SIG_ALRM,sig_alrm) 的下一行。也並沒有執行迴圈裡的任何程式區塊,除非它又accept到 一個新連線,不然我也沒辦法關掉這個我應該已經要關的socket了。 雖然我可以透過把client的socket改成global然後讓sig_alrm去關 它,可是這樣的結構我覺得不是很好。我想請問一下,有什麼比較好 的signal處理方法來解決這樣的問題嗎? -- 派特.萊利說道 : "他仍然是米高.佐丹(Michael Jordan)" 2001. Oct -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.166.83.104
文章代碼(AID): #12SyFtu2 (Network)
文章代碼(AID): #12SyFtu2 (Network)