c - 从此示例代码中获取 libev 远程 IP 地址



我正在尝试从以下链接学习libevent/libev(在本例中为libev):http://www.ibm.com/developerworks/aix/library/au-libev/

我想知道如何找出远程IP地址是什么,以便我可以构建自己的DHT。

我猜这与传入的结构有关,但我只是不知道。

这是使用传入变量的回调代码,对于其余代码,请单击上面的链接。

void buf_read_callback(struct bufferevent *incoming,
                       void *arg)
{
  struct evbuffer *evreturn;
  char *req;
  req = evbuffer_readline(incoming->input);
  if (req == NULL)
    return;
  evreturn = evbuffer_new();
  evbuffer_add_printf(evreturn,"You said %sn",req);
  bufferevent_write_buffer(incoming,evreturn);
  evbuffer_free(evreturn);
  free(req);
}

基本上,示例代码提供了一个由 libev 事件驱动的"服务器",您可以通过远程登录服务器 ip:port 对连接到服务器,它只会回显您对它所说的一切 - 请注意"你说 %s"的行

我会在调用accept()时存储远程地址,然后将其与新连接相关联。但是,您也可以在回调中使用getpeername()。libev 对此没有什么特别的,只需获取 FD 编号并进行网络编程,就像您总是在 C 中所做的那样。

有一个例子:

struct sockaddr_in ip_adr_get;
int ip_adr_len;
ip_adr_len = sizeof(ip_adr_get);
getpeername(fd, &ip_adr_get, &ip_adr_len);
printf("IP address is: %sn", inet_ntoa(ip_adr_get.sin_addr));
printf("Port is: %dn", (int) ntohs(ip_adr_get.sin_port));

相关内容

  • 没有找到相关文章

最新更新