日期:2014-05-16  浏览次数:20857 次

为什么错误代码gcc编译没有报错
linux下:  
函数声明:char *inet_ntoa (struct in_addr);
  返回点分十进制的字符串在静态内存中的指针。
  所在头文件:<arpa/inet.h>
 int inet_aton(const char *string, struct in_addr*addr);
  参数描述:
  1 输入参数string包含ASCII表示的IP地址。
  2 输出参数addr是将要用新的IP地址更新的结构。


悲剧的是我把inet_aton 写成 inet_ntoa,但gcc 没报错?
  if (inet_ntoa(HOST_ADDR, &server_addr.sin_addr) == 0) {  //XXX:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define LISTENQ 5
#define MAX_BUFFER_SIZE 512
#define HOST_ADDR "192.168.56.102"

int listenfd;
unsigned char buf[MAX_BUFFER_SIZE];

int InitSocket() {
  struct sockaddr_in  server_addr;
  listenfd = socket(AF_INET, SOCK_STREAM, 0);
  if (listenfd < 0) {
    perror("Socket created failed:");
    return -1;
  }
{
  int opt = 1;
  setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
}
  // bzero(&server_addr, sizeof(server_addr));
  server_addr.sin_family = AF_INET;
  server_addr.sin_port = htons(6666);
  // server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  // TODO: cann't  designate IP
  //unsigned char addr[] = HOST_ADDR;
  //inet_ntoa(addr , &server_addr.sin_addr);
  if (inet_ntoa(HOST_ADDR, &server_addr.sin_addr) == 0) {  //XXX:
    perror("inet_ntoa error:");
    return -1;
  }
  if (bind(listenfd, (struct sockaddr*)&server_addr, 
        sizeof(server_addr)) < 0) {
    perror("Bind error:");
    return -1;
  }
  if (listen(listenfd, LISTENQ) < 0) {
    perror("Listening error:");
    return -1;
  }
  printf("Listening ...\n");
}

int Reading() {
  struct sockaddr_in client_addr;
  socklen_t len = sizeof(client_addr);
  int connfd = accept(listenfd, (struct sockaddr *)&client_addr, &len);
  if (connfd < 0) {
    perror("accept error:");
    return -1;
  }
  printf("Connect from %s , port %d \n",
      inet_ntoa(client_addr.sin_addr.s_addr),
      ntohs(client_addr.sin_port));

  int recv_len = read(connfd, buf, MAX_BUFFER_SIZE);
  int i;
  printf("recv_len = %d\n", recv_len);
  for (i = 0; i < recv_len; ++i)