Chinaunix

标题: 请教accept的问题 [打印本页]

作者: cunettenuc    时间: 2008-04-01 21:22
标题: 请教accept的问题
请教各位, 就是在
connfd = accept(listenfd, NULL, NULL);
的情况下, 如果返回-1, 证明出错, 那么我还可不可以继续使用这个listenfd监听呢?

也就是说可不可以写成

  1. while (1)
  2. {
  3.       if ((connfd = accept(listenfd, NULL, NULL)) < 0)
  4.                continue;
  5. }
复制代码

这种形式, 谢谢!
作者: cunettenuc    时间: 2008-04-01 21:31
我刚刚看了一下UNP V1上面的非阻塞accept部分, 觉得应该是可以的.
不晓得是不是这样子的?
作者: system888net    时间: 2008-04-01 21:33
标题: 回复 #1 cunettenuc 的帖子
当然可以继续用listenfd,但你的代码显然不科学..
作者: cunettenuc    时间: 2008-04-01 21:40
原帖由 system888net 于 2008-4-1 21:33 发表
当然可以继续用listenfd,但你的代码显然不科学..


嗯. 谢谢, 在返回之后还应该检查一下errno, 根据不同的errno再决定是否继续调用accept()或者是就此退出, 是吧?
作者: system888net    时间: 2008-04-01 21:55
标题: 回复 #4 cunettenuc 的帖子
你说对了,正确,但要提醒的是一些系统errno不能反映accept的错误!
作者: cunettenuc    时间: 2008-04-01 22:09
原帖由 system888net 于 2008-4-1 21:55 发表
你说对了,正确,但要提醒的是一些系统errno不能反映accept的错误!


麻烦你举几个例子, 非常感谢!
作者: system888net    时间: 2008-04-01 22:30
标题: 回复 #6 cunettenuc 的帖子
在多线程的应用系统里,有专门的解决方式(如Solaris 有_REENTRANT标志)
在不同系统里移植时要注意的.
你的系统如果是简单的单线程,那问题不大!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2