Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)

java.lang.SecurityException: Permission denied (missing INTERNET permission?) 
	at java.net.InetAddress.lookupHostByName(InetAddress.java:418) 
	at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
	at java.net.InetAddress.getAllByName(InetAddress.java:214) 
	at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
	at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
	at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
	at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
	at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
	at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
	at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461) 
	at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 
	at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
	at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
	at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81) 
	at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165) 
	...
Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) 
	at libcore.io.Posix.getaddrinfo(Native Method) 
	at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61) 
	at java.net.InetAddress.lookupHostByName(InetAddress.java:405) 
	... 22 more 
Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied) 
	... 25 more 

퍼미션을 누락했기 때문에 보안이슈가 발생했을 수있다는 부분이다. 보통 답변들은 아래 퍼미션이 누락되었다고 답변하고 있다.

<uses-permission android:name="android.permission.INTERNET"/>

하지만, 위 사례는 퍼미션이 포함되어 있는데도 문제가 발생하는 경우이다.  에러를 좀 더 살펴보면 DNS 서버에서 데이터를 받지 못했(getaddrinfo failed: EAI_NODATA 부분)고,  그 아랫 부분에 왜 정보를 받지 못했는지 아래와 같이 에러가 난다.

Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)

내용인 즉, 퍼미션이 없다는 것인데 위에 언급되었듯이 이미 퍼미션은 추가되어 있다 @.@

이와 관련되어 검색해도 다른 해결책이나 원인은 안내된 것이 없다. 개인적인 경험으로는 보통 1회성으로 발생하며 재시도 하는 경우 대체적으로 성공한다. 내 경우에는 header의 url은 example.com을 가리키고, 실제 url은 192.168.0.1 처럼 ip주소인 경우 발생했다.

개인적으로 추측해보건데, 안드로이드에 기본으로 탑재된 HttpClient는 여러가지 이슈를 가진 것으로 널리 알려져있는데, 이도 그 중 하나로 보인다.

참조

  • https://github.com/pfleidi/yaxim/issues/167
  • http://stackoverflow.com/questions/11273197/error-message-java-net-socketexception-socket-failed-eacces-permission-denie
  • http://helloworld.naver.com/helloworld/377316

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.