作者willhunting (一路到巴西)
看板Network
标题[问题] 写server时的signal处理
时间Sun May 1 01:44:31 2005
我在写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