“inet_ntoa未声明”错误

5

我正在尝试使用inet_ntoa函数,编写以下代码:

printf("Got connection from: %s:%d\n", inet_ntoa(cli_addr.sin_addr.s_addr), cli_addr.sin_port);

使用以下包含文件:
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

然而,使用g++/gcc编译时我总是会遇到以下错误:

错误:‘inet_ntoa’在此作用域中未声明

如果我注释掉那一行,代码就可以正常运行。

我是在Ubuntu12.04下运行的。

有人能告诉我错过了什么吗?

谢谢!


你使用的是哪个编译器?我在 g++/gcc 5.1 上成功编译了你的代码。 - shrike
1
OT: sin_port以网络字节顺序出现。您需要将调用包装到ntoh()中,以使用(更易读的;-)主机字节顺序打印端口号。 - alk
我使用 g++ 4.6.3 进行了编译;@shrike - Ron
1个回答

9

man inet_ntoa 中可以看出,在包含头文件之前,您必须定义 _BSD_SOURCE

#define _BSD_SOURCE
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

2
我正在使用Centos7,不需要定义_BSD_SOURCE - 看起来我只是缺少了arpa/inet.h :) - orgg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接