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);
} 这个端口你能用吗? 13?:em30::em30::em30: 我用netstat看了一下,13号端口没被占用啊。
附:
Daytime协议
有一个有用的调试工具就是daytime服务。它的作用就是返回当前时间和日期,格式是字符串格式。
基于TCP的daytime服务
daytime服务是基于TCP的应用,服务器在TCP端口13侦听,一旦有连接建立就返回ASCII形式的日期和时间,在传送完后关闭连接。接收到的数据被忽略。
基于UDP的daytime服务
daytime服务也可以使用UDP协议,它的端口也是13,不过UDP是用数据报传送当前时间的。接收到的数据被忽略。 明白了,是权限不够造成的,加上 sudo 运行就可以了,谢谢楼上各位 你竟然敢用 13 作为端口 牛屄。 1024以下的端口是well known的,不能随便用
http://www.iana.org/assignments/port-numbers 为什么不用error()或perror()等等出错处理函数,而是用printf()函数呢?这样出了错也不知道错在哪里 另外0到1023号这些熟知端口(well-known)是你能随便用的吗?当然,注册端口(1024-49151)最好也别用,要用就用动态端口(49152-65535)作为临时端口 检查返回值,查看对应错误代码。
页:
[1]
2