免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: feeling
打印 上一主题 下一主题

Socket描述符可以是0吗? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-01-04 14:11 |只看该作者

Socket描述符可以是0吗?

man accpet


  1. RETURN VALUE
  2.        The call returns -1 on error.  If it succeeds, it returns  a  non-nega-
  3.        tive integer that is a descriptor for the accepted socket.
复制代码


没有关掉STDIN返回0的可能性不存在啊

论坛徽章:
8
白羊座
日期:2015-01-21 18:35:03巳蛇
日期:2015-02-03 17:30:37处女座
日期:2015-02-03 17:31:02羊年新春福章
日期:2015-02-03 17:31:21巨蟹座
日期:2015-02-05 16:01:06申猴
日期:2015-02-05 16:01:31摩羯座
日期:2015-02-05 16:01:41酉鸡
日期:2015-02-05 16:02:37
12 [报告]
发表于 2005-01-04 14:12 |只看该作者

Socket描述符可以是0吗?

是啊,accept成功后的返回值的确是非负整数。
只是,我被一些教条式的言论蒙蔽了眼睛 ^_^
谁让UNIX下一切都是文件呢?
之前,我一直坚持认为0、1、2都是和“标准”对应的,我们自己弄出来的描述符都是>;=3的 ^_^

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
13 [报告]
发表于 2005-01-04 14:15 |只看该作者

Socket描述符可以是0吗?

查一下
1、对0socket进行读写操作是否正常?如果正常,就是思一克说的情况
2、thread_para是什么时候delete的?可以试试改成
thr_id = pthread_create(&my_thread_id, NULL, start_my_thread, (void*)nsock);

start_my_thread(void *arg)
{
nsock = (int)arg;
...
}

论坛徽章:
0
14 [报告]
发表于 2005-01-04 14:17 |只看该作者

Socket描述符可以是0吗?

标准的fd自己也可以close

论坛徽章:
0
15 [报告]
发表于 2005-01-04 14:24 |只看该作者

Socket描述符可以是0吗?

Windows里面描述的SOCKET的取值
0~SOCKET_ERROR

论坛徽章:
8
白羊座
日期:2015-01-21 18:35:03巳蛇
日期:2015-02-03 17:30:37处女座
日期:2015-02-03 17:31:02羊年新春福章
日期:2015-02-03 17:31:21巨蟹座
日期:2015-02-05 16:01:06申猴
日期:2015-02-05 16:01:31摩羯座
日期:2015-02-05 16:01:41酉鸡
日期:2015-02-05 16:02:37
16 [报告]
发表于 2005-01-04 14:28 |只看该作者

Socket描述符可以是0吗?

原帖由 "superdoctor" 发表:

没有关掉STDIN返回0的可能性不存在啊

事实上对于STDIN没有做什么处理,程序只是fork了一下而已:

  1. switch (fork())
  2.           {
  3.             case -1:
  4.         fprintf(stderr,"bad fork - %s\n",strerror(errno));
  5.         _exit(1);
  6.        
  7.             case 0:
  8.         if (setsid() == -1)
  9.         {
  10.           fprintf(stderr,"bad setsid - %s\n",strerror(errno));
  11.           _exit(1);
  12.         }

  13.         break;
  14.        
  15.             default:
  16.         _exit(0);
  17.           }
复制代码

论坛徽章:
0
17 [报告]
发表于 2005-01-04 14:30 |只看该作者

Socket描述符可以是0吗?

问题是,楼主有主动或隐含close(0)吗?

论坛徽章:
0
18 [报告]
发表于 2005-01-04 14:40 |只看该作者

Socket描述符可以是0吗?

楼主把accept那段贴出来吧

accept返回后是立即打印出返回值的还是在其他地方打印的呢?

论坛徽章:
8
白羊座
日期:2015-01-21 18:35:03巳蛇
日期:2015-02-03 17:30:37处女座
日期:2015-02-03 17:31:02羊年新春福章
日期:2015-02-03 17:31:21巨蟹座
日期:2015-02-05 16:01:06申猴
日期:2015-02-05 16:01:31摩羯座
日期:2015-02-05 16:01:41酉鸡
日期:2015-02-05 16:02:37
19 [报告]
发表于 2005-01-04 14:40 |只看该作者

Socket描述符可以是0吗?

[quote]原帖由 "albcamus"]问题是,楼主有主动或隐含close(0)吗?[/quote 发表:

有啊,在线程里面:

  1. if(sockfd >; 0)   // 问题在这里
  2. {
  3.   // ...
  4. }
  5. else
  6. {
  7.   //...
  8.   close(sockfd);
  9.   sockfd = -1;
  10.   return NULL;
  11. }
复制代码

单单判断sockfd大于0令我大伤脑筋,调试了许久才发现问题。
我奇怪的地方是Socket描述符可以等于0

论坛徽章:
0
20 [报告]
发表于 2005-01-04 14:47 |只看该作者

Socket描述符可以是0吗?

呵呵,原来这样。
我看了一下/proc/self/fd/目录下的文件描述符,除了0、1、2之外,还有一个255也默认打开了,这个是干什么的呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP