从这个示例代码获取libev远程IP地址?

时间:2013-01-26 08:29:04

标签: c libevent libev

我正在尝试从以下链接学习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 %s\n",req);
  bufferevent_write_buffer(incoming,evreturn);
  evbuffer_free(evreturn);
  free(req);
}

基本上示例代码提供了一个由libev事件驱动的“服务器”,你可以通过telneting服务器ip:port对连接到服务器,它只会回显你说的所有内容 - 注意说“你说%s \ n“

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

有例子:

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: %s\n", inet_ntoa(ip_adr_get.sin_addr));
printf("Port is: %d\n", (int) ntohs(ip_adr_get.sin_port));