以下是mysql的源码:
#if defined(HAVE_GETHOSTBYNAME_R)#if defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE)struct hostent *my_gethostbyname_r(const char *name,
struct hostent *result, char *buffer,
int buflen, int *h_errnop)
{
struct hostent *hp;
DBUG_ASSERT((size_t) buflen >= sizeof(*result));
if (gethostbyname_r(name,result, buffer, (size_t) buflen, &hp, h_errnop))
return 0;
return hp;
}#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT)struct hostent *my_gethostbyname_r(const char *name,
struct hostent *result, char *buffer,
int buflen, int *h_errnop)
{
if (gethostbyname_r(name,result,(struct hostent_data *) buffer) == -1)
{
*h_errnop= errno;
return 0;
}
return result;
}#else/* gethostbyname_r with similar interface as gethostbyname() */struct hostent *my_gethostbyname_r(const char *name,
struct hostent *result, char *buffer,
int buflen, int *h_errnop)
{
struct hostent *hp;
DBUG_ASSERT(buflen >= sizeof(struct hostent_data));
hp= gethostbyname_r(name,result,(struct hostent_data *) buffer);
*h_errnop= errno;
return hp;
}
#endif /* GLIBC2_STYLE_GETHOSTBYNAME_R */
里面的gethostbyname_r 有两种类型,一种是3个参数的, 一种是5个参数的,可是我在linux下查了一下,只有5个参数的那形式,没有3个参数的形式。 这个是怎么回事啊?
#if defined(HAVE_GETHOSTBYNAME_R)#if defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE)struct hostent *my_gethostbyname_r(const char *name,
struct hostent *result, char *buffer,
int buflen, int *h_errnop)
{
struct hostent *hp;
DBUG_ASSERT((size_t) buflen >= sizeof(*result));
if (gethostbyname_r(name,result, buffer, (size_t) buflen, &hp, h_errnop))
return 0;
return hp;
}#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT)struct hostent *my_gethostbyname_r(const char *name,
struct hostent *result, char *buffer,
int buflen, int *h_errnop)
{
if (gethostbyname_r(name,result,(struct hostent_data *) buffer) == -1)
{
*h_errnop= errno;
return 0;
}
return result;
}#else/* gethostbyname_r with similar interface as gethostbyname() */struct hostent *my_gethostbyname_r(const char *name,
struct hostent *result, char *buffer,
int buflen, int *h_errnop)
{
struct hostent *hp;
DBUG_ASSERT(buflen >= sizeof(struct hostent_data));
hp= gethostbyname_r(name,result,(struct hostent_data *) buffer);
*h_errnop= errno;
return hp;
}
#endif /* GLIBC2_STYLE_GETHOSTBYNAME_R */
里面的gethostbyname_r 有两种类型,一种是3个参数的, 一种是5个参数的,可是我在linux下查了一下,只有5个参数的那形式,没有3个参数的形式。 这个是怎么回事啊?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货