sunburu 发表于 2011-08-03 17:32

bind error

最近学习unix网络编程,按照书上的例子写程序,编译通过后bind返回值总是小于0,请问这个是怎么回事啊?谢谢#include        <stdio.h>
#include        <stdlib.h>
#include        <netinet/ip.h>
#include        <time.h>
#include        <sys/socket.h>                /* for listen() */
#include        <string.h>                        /* for bzero() */

#define        MAXLINE        4096
#define        LISTENQ        1024
int
main(int argc, char **argv)
{
        int         listenfd, connfd;
        struct        sockaddr_in servaddr;
        char        buff;
        time_t        ticks;

        if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
                printf("socket error");
                exit(1);
        }

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

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

        if ( listen(listenfd, LISTENQ) < 0) {
                printf("Listen error");
                exit(1);
        }

        for ( ; ; ) {
                if ( connfd = (accept(listenfd, (struct sockaddr *) NULL, NULL)) < 0) {
                        printf("accept error");
                        exit(1);
                }

                ticks = time(NULL);
                snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
                if ( write(connfd, buff, strlen(buff)) < 0) {
                        printf("write error");
                        exit(1);
                }
                if ( close(connfd) < 0) {
                        printf("close error");
                        exit(1);
                }
               
        }

        exit(0);
}

crazyhadoop 发表于 2011-08-03 23:02

这个端口你能用吗?

zj47596731 发表于 2011-08-04 10:23

13?:em30::em30::em30:

sunburu 发表于 2011-08-04 12:46

我用netstat看了一下,13号端口没被占用啊。

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

sunburu 发表于 2011-08-04 12:47

明白了,是权限不够造成的,加上 sudo 运行就可以了,谢谢楼上各位

JCheung 发表于 2011-08-05 00:18

你竟然敢用 13 作为端口 牛屄。

sparkzh 发表于 2011-08-05 10:08

1024以下的端口是well known的,不能随便用
http://www.iana.org/assignments/port-numbers

fagdie 发表于 2014-03-11 12:26

为什么不用error()或perror()等等出错处理函数,而是用printf()函数呢?这样出了错也不知道错在哪里

fagdie 发表于 2014-03-11 12:33

另外0到1023号这些熟知端口(well-known)是你能随便用的吗?当然,注册端口(1024-49151)最好也别用,要用就用动态端口(49152-65535)作为临时端口

Hugo801122 发表于 2014-03-17 20:14

检查返回值,查看对应错误代码。
页: [1] 2
查看完整版本: bind error