LinuxSir.cn,穿越时空的Linuxsir!

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

getsockname返回0。0。0。0 ?急!

[复制链接]
发表于 2006-9-14 15:45:11 | 显示全部楼层 |阅读模式

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <netdb.h>
  4. #include <sys/socket.h>
  5. #include <sys/types.h>

  6. int main(int ac, char **av) {
  7.         int ret,s;
  8.         socklen_t len;
  9.         struct hostent *hp;
  10.         struct in_addr in;
  11.         struct sockaddr_in remote_addr,addr;
  12.         s = socket(AF_INET, SOCK_STREAM, 0);
  13.         bzero(&local_addr, sizeof(remote_addr));
  14.         remote_addr.sin_family = AF_INET;
  15.         remote_addr.sin_port = htons(8080);

  16.         hp = gethostbyname(av[1]);
  17.         if (hp == NULL) {
  18.                 printf("gethostbyname failed\n");
  19.                 printf("it maybe an IP\n");
  20.                 exit(1);
  21.         }
  22.         memcpy(&remote_addr.sin_addr.s_addr, hp->h_addr, 4);

  23.         printf("IP: %s\n", inet_ntoa(remote_addr.sin_addr));
  24.         ret = connect(s, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
  25.         if (ret <0){
  26.                 perror("connect");
  27.                 exit(1);
  28.         }
  29.         printf("connected:%d\n",ret);
  30. //      len = sizeof(addr);
  31.         ret = getsockname(s, (struct sockaddr *)&addr, &len);
  32.         printf("got ip:%s\n",inet_ntoa(addr.sin_addr));
  33.         close(s);
  34.         return(0);
  35. }


  36. # ./gethost theserver
  37. IP: 192.168.1.50
  38. connected:0
  39. got ip:192.168.1.3


复制代码

这个小程序目的是找到本机的ip,(而且我只能用这个办法!)
在这里没问题,但是移到我的程序里就完蛋了,返回的竟然是0.0.0.0 而且getsockname也没出错:mad:
 楼主| 发表于 2006-9-14 16:15:25 | 显示全部楼层
日,原来参数用错了,但是为什么在小程序里就能成功呢?
len=sizeof(struct sockaddr)
回复 支持 反对

使用道具 举报

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

本版积分规则

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