LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1198|回复: 6

bind error

[复制链接]
发表于 2008-8-4 16:33:26 | 显示全部楼层 |阅读模式

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <sys/socketvar.h>
  6. #include <netinet/in.h>
  7. #include <errno.h>
  8. #include <time.h>

  9. #define MAXLINE 1024
  10. #define LISTENQ 1024

  11. int main(int argc, char **argv)
  12. {
  13.         int listenfd, connfd;
  14.         char buff[MAXLINE];
  15.         struct sockaddr_in servaddr;
  16.         time_t ticks;

  17.         if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0) ) < 0 )
  18.         {
  19.                 printf("socket error\nerrno:[%d]\n", errno);
  20.                 exit(1);
  21.         }

  22.         bzero(&servaddr, sizeof(servaddr));
  23.         servaddr.sin_family = AF_INET;
  24.         servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  25.         servaddr.sin_port = htons(13);
  26.         /*
  27.         if (inet_pton(AF_INET, "172.18.68.76", &servaddr.sin_addr) <= 0)
  28.         {
  29.                 printf("inet_pton error for [%s]\nerrno:[%d]\n", errno);
  30.                 exit(1);
  31.         }
  32.         */

  33.         if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
  34.         {
  35.                 printf("bind error\nerrno:[%d]\n", errno);
  36.                 exit(1);
  37.         }

  38.         if (listen(listenfd,LISTENQ) < 0)
  39.         {
  40.                 printf("listen error\nerrno:[%d]\n", errno);
  41.                 exit(1);
  42.         }

  43.         for (; ; )
  44.         {
  45.                 connfd = accept(listenfd, (struct sockaddr *)NULL, NULL);
  46.                 if (connfd < 0)
  47.                 {
  48.                         printf("accept error\nerrno:[%d]\n", errno);
  49.                         exit(1);
  50.                 }
  51.                 ticks = time(NULL);
  52.                 snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
  53.                 write(connfd, buff, strlen(buff));
  54.                 if (write(connfd, buff, strlen(buff)) == EOF)
  55.                 {
  56.                         printf("fputs error\nerrno:[%d]\n", errno);
  57.                         exit(1);
  58.                 }
  59.                 close(connfd);
  60.         }

  61.         exit(0);
  62. }

复制代码

这是我根据《UNIX网络编程》改的程序,编译运行返回:
bind error
errno:[13]
刚开始学网络编程,对这个不熟,有大侠知道是什么原因吗,在这谢谢了。
 楼主| 发表于 2008-8-4 16:34:21 | 显示全部楼层

bind error


  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <sys/socketvar.h>
  6. #include <netinet/in.h>
  7. #include <errno.h>
  8. #include <time.h>

  9. #define MAXLINE 1024
  10. #define LISTENQ 1024

  11. int main(int argc, char **argv)
  12. {
  13.         int listenfd, connfd;
  14.         char buff[MAXLINE];
  15.         struct sockaddr_in servaddr;
  16.         time_t ticks;

  17.         if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0) ) < 0 )
  18.         {
  19.                 printf("socket error\nerrno:[%d]\n", errno);
  20.                 exit(1);
  21.         }

  22.         bzero(&servaddr, sizeof(servaddr));
  23.         servaddr.sin_family = AF_INET;
  24.         servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  25.         servaddr.sin_port = htons(13);
  26.         /*
  27.         if (inet_pton(AF_INET, "172.18.68.76", &servaddr.sin_addr) <= 0)
  28.         {
  29.                 printf("inet_pton error for [%s]\nerrno:[%d]\n", errno);
  30.                 exit(1);
  31.         }
  32.         */

  33.         if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
  34.         {
  35.                 printf("bind error\nerrno:[%d]\n", errno);
  36.                 exit(1);
  37.         }

  38.         if (listen(listenfd,LISTENQ) < 0)
  39.         {
  40.                 printf("listen error\nerrno:[%d]\n", errno);
  41.                 exit(1);
  42.         }

  43.         for (; ; )
  44.         {
  45.                 connfd = accept(listenfd, (struct sockaddr *)NULL, NULL);
  46.                 if (connfd < 0)
  47.                 {
  48.                         printf("accept error\nerrno:[%d]\n", errno);
  49.                         exit(1);
  50.                 }
  51.                 ticks = time(NULL);
  52.                 snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
  53.                 write(connfd, buff, strlen(buff));
  54.                 if (write(connfd, buff, strlen(buff)) == EOF)
  55.                 {
  56.                         printf("fputs error\nerrno:[%d]\n", errno);
  57.                         exit(1);
  58.                 }
  59.                 close(connfd);
  60.         }

  61.         exit(0);
  62. }

复制代码

这是我根据《UNIX网络编程》改的程序,编译运行返回:
bind error
errno:[13]
刚开始学网络编程,对这个不熟,有大侠知道是什么原因吗,在这谢谢了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-4 16:37:03 | 显示全部楼层
晕,忘改主题了。
回复 支持 反对

使用道具 举报

发表于 2008-8-4 17:36:25 | 显示全部楼层
绑定1024以下端口需要root权限
你是不是用普通用户运行的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-5 10:30:14 | 显示全部楼层
谢谢你的回答,我用root登录运行时,它返回这个错误:
bind error
errno:[67]

我看67是‘ Link has been severed ’错误。
我把端口13随便改了一个大于1024的值就没问题,这知道为啥?
回复 支持 反对

使用道具 举报

发表于 2008-8-5 13:10:50 | 显示全部楼层
端口13是daytime服务,是不是已经打开了
netstat -an|grep :13 看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-5 15:41:08 | 显示全部楼层
好的,谢谢了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表