你好,我认真看了下您的代码,我现在这个socket 包依赖 luascoket ,为了减少依赖,我想通过LUA FFI方式实现!
在实现过程中 调用inet_ntoa 方法时,通过 gethostbyname 方法得到的结果无法转换为 struct in_addr 参数。
C代码如下:
typedef char * in_addr_t;
typedef struct
{
in_addr_t s_addr;
}in_addr;
typedef struct
{
char *h_name;
char **h_aliases;
int h_addrtype;
int h_length;
char **h_addr_list;
}hostent;
int gethostname(char *name, size_t len);
char *inet_ntoa (struct in_addr);
hent = gethostbyname(hname);
for(i = 0; hent->h_addr_list[i]; i++) {
printf("%s\n", inet_ntoa(*(struct in_addr*)(hent->h_addr_list[i])));
}
Lua代码:
local hostent = ffi.C.gethostbyname(ngx.var.hostname)
通过执行 ffi.cast('struct in_addr *',hostent.h_addr_list[0]) ,已经通过ffi.cast('struct in_addr *',hostent.h_addr_list[0]) 得到 struct in_addr * ,但是无法得到 struct in_addr ,请问还需要怎样转换么?
在 2015年12月2日星期三 UTC+8下午9:23:50,王程写道: