Error : Servname not supported for ai_socktype 错误

本文探讨了在嵌入式armlinux平台上使用getaddrinfo时遇到的Servnamenotsupportedforai_socktype错误。通过对比不同交叉编译工具的结果,分析了错误产生的原因,并给出了相应的解决方案。

       针对在嵌入式arm linux平台使用getaddrinfo,出现Error : Servname not supported for ai_socktype这个错误,谷歌上很多人的解释是需要在/etc/services作文章,但是嵌入式平台甚至精简到service这样的命令都没有,通过下面这段代码交叉编译之后,对使用不同的交叉编译工具进行测试,用arm-linux-gnueabi-gcc就会出现错误,用arm-linux-gcc就不会有这个错误,基本上判断是使用的glibc不同,实现不同。

       笔者也是在编译ntpdate4.2.4P7 arm linux平台遇到的问题,使用arm-linux-gcc编译总是会出错,使用arm-linux-gnueabi-gcc可以编译,但是运行会报出如上错误。

测试1:

#arm-linux-gnueabi-gcc main.c -o main

测试2:

#arm-linux-gcc main.c -o main


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <sys/socket.h>
#include <netdb.h>

int main()
{
	int error=0;
	char *serv="time.buptnet.edu.cn";
	char *service="ntp";
	struct addrinfo *addrResult;
	/* Address infos structure to store hints for getaddrinfo */
	struct addrinfo hints;

	memset(&hints, 0, sizeof(hints));
	hints.ai_family = AF_INET;
	hints.ai_socktype = SOCK_DGRAM;

	error = getaddrinfo(serv, service, &hints, &addrResult);
	if (error != 0) {
		/* Conduct more refined error analysis */
		if (error == EAI_FAIL || error == EAI_AGAIN){
			/* Name server is unusable. Exit after failing on the
			   first server, in order to shorten the timeout caused
			   by waiting for resolution of several servers */
			fprintf(stderr, "Name server cannot be used, exiting");
		}
		fprintf(stderr, "error=%d\n", error);
		fprintf(stderr, "Error : %s\n", gai_strerror(error));
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值