急:如何关闭此socket?

newhare 2004-04-19 03:02:08
while(1)
{
rs = accept(socket, ....);

if ( pthread_create(....) )

......
}
问:在上面程序中,如何退出循环呢?
...全文
19 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hatecoding 2004-04-23
  • 打赏
  • 举报
回复
如果在一个线程中,很简单阿
不要用while( 1 )
设置一个全局的信号变量terminate,用while ( terminate )
通过主进程或其他线程控制terminate,来控制该线程
newhare 2004-04-22
  • 打赏
  • 举报
回复
如果这段程序在一个线程中呢,采用信号的方法好象会影响所有的线程,此时又该怎么退出呢。
wangjinhu 2004-04-21
  • 打赏
  • 举报
回复
if(setjmp(position)==1)
goto my_quit;
signal(SIGIT,catch());/*catch()函数中含有longjmp(position,1)*/
while(1)
{
rs = accept(socket, ....);

if ( pthread_create(....) )

......
}
my_quit:
yuanlei1978113 2004-04-20
  • 打赏
  • 举报
回复
shutdown();
close();
newhare 2004-04-20
  • 打赏
  • 举报
回复
顶一顶
wangjinhu 2004-04-20
  • 打赏
  • 举报
回复
早说阿!哈哈signal(),加上longjmp
jkjium 2004-04-19
  • 打赏
  • 举报
回复
你可以捕捉SIGHUP,自定义它的处理程序做清理工作。想重起的时候kill -HUP pid不就行了
newhare 2004-04-19
  • 打赏
  • 举报
回复
没错,作服务器一般情况下不退出的,但服务器有时候也得关机吧,或者因为其他原因需要重启吧,我是想在程序退出的时候,先跳出循环,然后执行循环后面的清理工作。因为当我按ctrl+c时,程序就直接退出了,但是循环外的代码没有执行,比如一些内存的释放,数据库的连接等。

各位:我知道用 break 可以跳出循环,问题在于,accept后,程序阻塞了,即使有break也无法执行,除非先accept到一客户端连接。我一直想不明白,请各位帮帮忙。
wxywh 2004-04-19
  • 打赏
  • 举报
回复
在退出(break)之前close套接子即可.
rexp 2004-04-19
  • 打赏
  • 举报
回复
作服务器,干吗要退出循环呢?
要退出,也是收到了信号,用户发出的。
gaoxianfeng 2004-04-19
  • 打赏
  • 举报
回复
信号!
rzsheng 2004-04-19
  • 打赏
  • 举报
回复
break;
wangjinhu 2004-04-19
  • 打赏
  • 举报
回复
goto?
longjump?

newhare 2004-04-19
  • 打赏
  • 举报
回复
有没有人帮帮我啊

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧