你好,我认真看了下您的代码,我现在这个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,王程写道:
非常感谢,你帮了我大忙!
在 2015年12月2日星期三 UTC+8下午8:13:45,泡泡鱼写道:
local socket = require("socket")
print(os.time())
function GetAdd(hostname)
local ip, resolved = socket.dns.toip(hostname)
local ListTab = {}
for k, v in ipairs(resolved.ip) do
table.insert(ListTab, v)
end
return ListTab
end
print(unpack(GetAdd('localhost')))
print(unpack(GetAdd(socket.dns.gethostname())))
------------------ 原始邮件 ------------------
发送时间: 2015年12月2日(星期三) 晚上6:20
主题: Re: [openresty] 获取openresty所在的当前服务器的IP和域名
你好:
我通过ngx.var.hostname 获取到本机的主机名,但是没有找到方法来获取本机的IP,
请明示怎么获取本机IP,我指的是网卡的IP
在 2015年12月2日星期三 UTC+8下午5:39:19,YuanSheng Wang写道:可以通过 LuaJIT 的 FFI 方式调用本地 C 函数完成系统 API 调用。
本机 IP 是可能的,本机域名,做不到吧?除非你的域名信息明确记录到某个文件,这样的话直接读取文件就好。
On Wed, Dec 2, 2015 at 5:23 PM, 王程
<wang28...@gmail.com> wrote:
大家好:
请问在openresty 或者 nginx中是否有获取本机IP和域名的方法?求告知
--
--
--