2015-04-07 3 views
0

просто попробовал АРК с нашей APK в первый раз. Она начинается нормально, но не для подключения к нашему серверу бэкэнд:setsockopt failed: EINVAL - поддерживает ARC https/SSL?

SocketException: setsockopt не удалось: EINVAL (недопустимый аргумент)

Текущий Chrome и ARC, как скачал 2015-04-07.

Stack Trace показывает, что он не пытается установить параметр сокета KeepAlive, который не поддерживается (для этого указателя).

Добавление SocketConfig socket = SocketConfig.custom().setSoKeepAlive(false).build(); к HttpClient не помогает, а HttpClientConnectionOperator это всегда называют sock.setKeepAlive(socketConfig.isSoKeepAlive()); и он смотрит на меня, вызов падает даже при вызове с false ...

Спасибо, Ваше здоровье, Том.

I/HttpClient( 204): I/O exception (java.net.SocketException) caught when processing request to HttpRoute[{s}->https://xxx.xxx.xxx:443]: setsockopt failed: EINVAL (Invalid argument) 
I/HttpClient( 204): Retrying request to HttpRoute[{s}->https://xxx.xxx.xxx:443] 

shell.js:141 I/libposix_translation_static( 204): TCPSocket::Bind: [::0.0.0.0]:0 

shell.js:141 I/libposix_translation_static( 204): TCPSocket::connect: [xxx]:443 

shell.js:141 E/PortalHttpClient( 204): Failed http request: POST https://xxx.xxx.xxx:443/if/xxx HTTP/1.1 
E/PortalHttpClient( 204): java.net.SocketException: setsockopt failed: EINVAL (Invalid argument) 
E/PortalHttpClient( 204): at libcore.io.IoBridge.setSocketOption(IoBridge.java:306) 
E/PortalHttpClient( 204): at java.net.PlainSocketImpl.setOption(PlainSocketImpl.java:289) 
E/PortalHttpClient( 204): at java.net.Socket.setKeepAlive(Socket.java:453) 
E/PortalHttpClient( 204): at com.android.org.conscrypt.OpenSSLSocketImplWrapper.setKeepAlive(OpenSSLSocketImplWrapper.java:100) 
E/PortalHttpClient( 204): at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:134) 
E/PortalHttpClient( 204): at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) 
E/PortalHttpClient( 204): at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:373) 
E/PortalHttpClient( 204): at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:225) 
E/PortalHttpClient( 204): at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) 
E/PortalHttpClient( 204): at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86) 
E/PortalHttpClient( 204): at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) 
E/PortalHttpClient( 204): at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) 
E/PortalHttpClient( 204): at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 
E/PortalHttpClient( 204): at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) 
E/PortalHttpClient( 204): at xxx.xxx.PortalHttpClient.execute(PortalHttpClient.java:134) 
E/PortalHttpClient( 204): at xxx.xxx.PortalHttpClient.executeWithRetry(PortalHttpClient.java:107) 
E/PortalHttpClient( 204): at xxx.xxx.PortalHttpClient.post(PortalHttpClient.java:78) 
E/PortalHttpClient( 204): at xxx.xxx.HttpServerCommunication.pairDevice(HttpServerCommunication.java:100) 
E/PortalHttpClient( 204): at xxx.xxx.ServerCommunicationSwitch.pairDevice(ServerCommunicationSwitch.java:51) 
E/PortalHttpClient( 204): at xxx.xxx.xxx.app.base.XxxAsyncTask.doInBackground(XxxAsyncTask.java:53) 
E/PortalHttpClient( 204): at android.os.AsyncTask$4.call(AsyncTask.java:372) 
E/PortalHttpClient( 204): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
E/PortalHttpClient( 204): at android.os.AsyncTask$SerialExecutor$2.run(AsyncTask.java:280) 
E/PortalHttpClient( 204): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
E/PortalHttpClient( 204): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
E/PortalHttpClient( 204): at java.lang.Thread.run(Thread.java:841) 
E/PortalHttpClient( 204): Caused by: libcore.io.ErrnoException: setsockopt failed: EINVAL (Invalid argument) 
E/PortalHttpClient( 204): at libcore.io.Posix.setsockoptInt(Native Method) 
E/PortalHttpClient( 204): at libcore.io.ForwardingOs.setsockoptInt(ForwardingOs.java:122) 
E/PortalHttpClient( 204): at libcore.io.IoBridge.setSocketOptionErrno(IoBridge.java:338) 
E/PortalHttpClient( 204): at libcore.io.IoBridge.setSocketOption(IoBridge.java:304) 
E/PortalHttpClient( 204): ... 28 more 
W/PortalHttpClient( 204): xxx.xxx.comm.common.CommunicationException: HOST_NOT_AVAILABLE[recoverable]: java.net.SocketException: setsockopt failed: EINVAL (Invalid argument) - will retry in 10s 
+0

Является ли этот HttpClient Android или отдельная библиотека Apache HttpClient для Android? – CommonsWare

+0

Это внешний httpclient-android-4.3.3.jar – cheesus

+0

Хм, похоже, что ARC устанавливает einval независимо от того, что это за значение, если есть неподдерживаемая опция. Есть ли способ изменить внешний httpclient, чтобы не устанавливать этот параметр, или я неправильно понял, и это происходит из кода ARC? –

ответ

0

Есть два вопроса:

Косвенно, вы спрашиваете о о setsockopt поддержки, основанной на ошибке. Да, ARC поддерживает подмножество вызовов setsockopt. Вы можете увидеть наш уровень перевода posix и какие флаги поддерживаются в нашем репозитории с открытым исходным кодом: https://chromium.googlesource.com/arc/arc/+/release-41.4410.244.0/src/posix_translation/socket_stream.cc#98 (это для текущей версии ARC 41). К сожалению, на основе вашего стоп-колла вы пытаетесь установить SO_KEEPALIVE, который в настоящее время не поддерживается. Вот вам и проблема отслеживания, если вы хотите запустить ее, но вряд ли она будет реализована очень скоро: https://code.google.com/p/chromium/issues/detail?id=384940

Что касается HTTPS/SSL, мы получили некоторые сообщения об этом извне, но в основном эти отчеты были расплывчатый. Некоторые SSL работают, поэтому непонятно, почему у некоторых людей возникают проблемы. Если вы можете создать небольшой воспроизводящий APK с источником, который выявляет проблему с HTTPS/SSL, вы можете file a bug, чтобы выделить это.

+0

Спасибо за понимание! - на самом деле я хотел предоставить некоторую информацию, но я не могу нажать enter в поле комментария. Поэтому я отредактирую исходный вопрос. – cheesus

 Смежные вопросы

  • Нет связанных вопросов^_^