免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8726 | 回复: 10
打印 上一主题 下一主题

bind error [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-03 17:32 |只看该作者 |倒序浏览
最近学习unix网络编程,按照书上的例子写程序,编译通过后bind返回值总是小于0,请问这个是怎么回事啊?谢谢
  1. #include        <stdio.h>
  2. #include        <stdlib.h>
  3. #include        <netinet/ip.h>
  4. #include        <time.h>
  5. #include        <sys/socket.h>                /* for listen() */
  6. #include        <string.h>                        /* for bzero() */

  7. #define        MAXLINE        4096
  8. #define        LISTENQ        1024
  9. int
  10. main(int argc, char **argv)
  11. {
  12.         int         listenfd, connfd;
  13.         struct        sockaddr_in servaddr;
  14.         char        buff[MAXLINE];
  15.         time_t        ticks;

  16.         if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
  17.                 printf("socket error");
  18.                 exit(1);
  19.         }

  20.         bzero(&servaddr, sizeof(servaddr));
  21.         servaddr.sin_family        = AF_INET;
  22.         servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  23.         servaddr.sin_port = htons(13);

  24.         if ( bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) {
  25.                 printf("bind error");
  26.                 exit(1);
  27.         }

  28.         if ( listen(listenfd, LISTENQ) < 0) {
  29.                 printf("Listen error");
  30.                 exit(1);
  31.         }

  32.         for ( ; ; ) {
  33.                 if ( connfd = (accept(listenfd, (struct sockaddr *) NULL, NULL)) < 0) {
  34.                         printf("accept error");
  35.                         exit(1);
  36.                 }

  37.                 ticks = time(NULL);
  38.                 snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
  39.                 if ( write(connfd, buff, strlen(buff)) < 0) {
  40.                         printf("write error");
  41.                         exit(1);
  42.                 }
  43.                 if ( close(connfd) < 0) {
  44.                         printf("close error");
  45.                         exit(1);
  46.                 }
  47.                
  48.         }

  49.         exit(0);
  50. }
复制代码

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
2 [报告]
发表于 2011-08-03 23:02 |只看该作者
这个端口你能用吗?

论坛徽章:
1
技术图书徽章
日期:2013-10-29 15:46:41
3 [报告]
发表于 2011-08-04 10:23 |只看该作者
13?

论坛徽章:
0
4 [报告]
发表于 2011-08-04 12:46 |只看该作者
我用netstat看了一下,13号端口没被占用啊。

附:
Daytime协议
  有一个有用的调试工具就是daytime服务。它的作用就是返回当前时间和日期,格式是字符串格式。
  基于TCP的daytime服务
  daytime服务是基于TCP的应用,服务器在TCP端口13侦听,一旦有连接建立就返回ASCII形式的日期和时间,在传送完后关闭连接。接收到的数据被忽略。
  基于UDP的daytime服务
  daytime服务也可以使用UDP协议,它的端口也是13,不过UDP是用数据报传送当前时间的。接收到的数据被忽略。

论坛徽章:
0
5 [报告]
发表于 2011-08-04 12:47 |只看该作者
明白了,是权限不够造成的,加上 sudo 运行就可以了,谢谢楼上各位

论坛徽章:
0
6 [报告]
发表于 2011-08-05 00:18 |只看该作者
你竟然敢用 13 作为端口 牛屄。

论坛徽章:
0
7 [报告]
发表于 2011-08-05 10:08 |只看该作者
1024以下的端口是well known的,不能随便用
http://www.iana.org/assignments/port-numbers

论坛徽章:
0
8 [报告]
发表于 2014-03-11 12:26 |只看该作者
为什么不用error()或perror()等等出错处理函数,而是用printf()函数呢?这样出了错也不知道错在哪里

论坛徽章:
0
9 [报告]
发表于 2014-03-11 12:33 |只看该作者
另外0到1023号这些熟知端口(well-known)是你能随便用的吗?当然,注册端口(1024-49151)最好也别用,要用就用动态端口(49152-65535)作为临时端口

论坛徽章:
0
10 [报告]
发表于 2014-03-17 20:14 |只看该作者
检查返回值,查看对应错误代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP