我实现了libevent book中提供的echo服务器。
我修改accept_conn_cb
函数,以便服务器打印新创建的连接的IPv4地址(以十进制数字表示法)。以下是我的回调
static void accept_conn_cb(
struct evconnlistener *listener,
evutil_socket_t fd,
struct sockaddr *address,
int socklen,
void *ctx)
{
char ipAddress[INET_ADDRSTRLEN];
struct sockaddr_in * saddr_in = (struct sockaddr_in *) &address;
if (!inet_ntop(AF_INET, &(saddr_in->sin_addr), ipAddress, INET_ADDRSTRLEN))
puts("Couldn't retrieve IPv4 address");
printf("A new connection established from %s\n", ipAddress);
/* ... */
当我编译并运行它时,它总是打印下面的奇怪地址:
从 252.127.0.0 或
建立的新连接从 253.127.0.0 或
建立的新连接从 255.127.0.0
建立的新连接无论我连接什么机器。我使用telnet来测试连接。
我编写了另一个用纯C编写的echo服务器版本(没有libevent)。当我运行它时,它总是返回正确的地址。