[問題] 寫server時的signal處理
我在寫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
Network 近期熱門文章
PTT數位生活區 即時熱門文章