gethostbyname返回NULL的问题分析
来源:互联网 发布:淘宝网店卖衣服 编辑:程序博客网 时间:2024/05/20 17:07
测试组提了一个奇怪的bug,一断开网络,并连接iPHone,程序就crash
于是开始分析。
无非就是加日志,找出crash函数。最后发现时使用网上的一个开源代码“etcp.h”的set_address(...)函数中crash。也就是调用gethostbyname处。
查看了一下错误码(h_errno),是HOST_NOT_FOUND。
于是网上找了个简单demo获取localhost,对比有网络连接和无网络连接状况下,前者能解析到127.0.0.1,后者直接返回HOST_NOT_FOUND。
打开host文件一看,水落石出:测试人员屏蔽了一个条目,localhost 127.0.0.1
网上看了下localhost的说明,说localhost代表本机,使用localhost的数据不用经过网卡,而直接使用127.0.0.1会经过网卡~
附上stackoverflow上的代码
#include <stdio.h>#ifdef _WIN32# include "winsock.h"#else# include <netdb.h># include <arpa/inet.h>#endifstatic void initialise(void){#ifdef _WIN32 WSADATA data; if (WSAStartup (MAKEWORD(1, 1), &data) != 0) { fputs ("Could not initialise Winsock.\n", stderr); exit (1); }#endif}static void uninitialise (void){#ifdef _WIN32 WSACleanup ();#endif}int main (int argc, char *argv[]){ struct hostent *he; if (argc == 1) return -1; initialise(); he = gethostbyname (argv[1]); if (he == NULL) { switch (h_errno) { case HOST_NOT_FOUND: fputs ("The host was not found.\n", stderr); break; case NO_ADDRESS: fputs ("The name is valid but it has no address.\n", stderr); break; case NO_RECOVERY: fputs ("A non-recoverable name server error occurred.\n", stderr); break; case TRY_AGAIN: fputs ("The name server is temporarily unavailable.", stderr); break; } } else { puts (inet_ntoa (*((struct in_addr *) he->h_addr_list[0]))); } uninitialise (); return he != NULL;}
$ ./a.out stackoverflow.com69.59.196.211
0 0
- gethostbyname返回NULL的问题分析
- GetDlgItem()返回NULL的问题
- findFragmentById返回为null的分析
- gethostbyname的返回值类型struct hostent
- gethostbyname的返回值类型struct hostent
- getBestProvider总是返回null问题的解决之道
- getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) 返回null的问题
- Android ActionBar返回null的问题
- google map 返回null 的问题
- spring getHibernateTemplate() 返回null的问题
- 关于Json返回null的问题
- ToolProvider.getSystemJavaCompiler() 返回 null的问题
- OpenCv中cvCaptureFromFile返回NULL的问题
- 压缩bitmap时返回null的问题
- OpenCv中cvCaptureFromFile返回NULL的问题
- libnet_init()总是返回NULL的问题
- ToolProvider.getSystemJavaCompiler() 返回 null的问题
- MFC之GetDlgItem返回NULL的问题
- 参数传递二维数组
- 如何将FAT、FAT32的U盘改成NTFS格式
- 大型网站数据库架构分析
- php访问url的四种方式
- Unity 旋转动画(1)
- gethostbyname返回NULL的问题分析
- GOOGLE NEXUS WEBSITE MENU
- C标签
- Hibernate连接MySql数据库时 Hibernate.cfg.xml配置文件
- 关于xcode导出ipa的几种方式
- Computer Vision的尴尬
- java实体类实现序列化的意义
- android.support.v4.app.Fragment和android.app.Fragment区别
- 网络环路与攻击和谷歌的四个8