没事做的和我一样的初初初初初学者可以编译着看看,比自己写方便多了
https://
看到它在Client.c里面用的是gethostbyname()函数,做了些查阅
gethostbyname()有若干特征
gethostbyname()成功后会返回一个指向hostent构造体的指针
但它不能处理IPv6地址
所以再新的代码中建议使用getaddrinfo()函数
gethostbyname()失败后不会設定errno
但它会设定一个叫h_errno的global integer
并且会有一个hstrerror()的函数接受h_errno,返回一个const char *描述错误
所以错誤处理可以写为
程序代码:
hostinfo = gethostbyname (hostname);
if(hostinfo == NULL)
fprintf(stderr,"gethostbyname error for host: %s: %s",\
hostname,hstrerror(h_errno));
if(hostinfo == NULL)
fprintf(stderr,"gethostbyname error for host: %s: %s",\
hostname,hstrerror(h_errno));
编译时代码有用到-D_GNU_SOURCE 选项
gcc -D_GNU_SOURCE hello.c
means the compiler will use the GNU standard of compilation, the superset of all
other standards under GNU C libraries.
并且加上这个选项之后发现utils.h里的
program_invocation_short_name
就可以使用了
可以man 一下
$ man program_invocation_short_name
#define _GNU_SOURCE
#include <errno.h>
extern char *program_invocation_name;
extern char *program_invocation_short_name;
[ 本帖最后由 madfrogme 于 2012-7-22 16:07 编辑 ]