AIX: IBM Java: java.net.SocketException: Conexión agotado:podría ser debido a una dirección no válida

Hemos visto las siguientes excepciones muy frecuentemente en IBM AIX cuando se intenta establecer una conexión SSL en nuestro servidor:

java.net.SocketException: Socket closed
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275(Compiled Code))
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(DashoA6275(Compiled Code))
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java(Inlined Compiled Code))
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java(Compiled Code))
at java.io.FilterOutputStream.flush(FilterOutputStream.java(Compiled Code))
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java(Compiled Code))
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java(Compiled Code))
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java(Compiled Code))
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java(Compiled Code))
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java(Compiled Code))
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java(Compiled Code))
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java(Inlined Compiled Code))
at com.eximtechnologies.httptransport.client.ClientTransport.receiveMessages(ClientTransport.java(Compiled Code))
at com.eximtechnologies.httptransport.client.ClientTransport.receiveMessages(ClientTransport.java(Inlined Compiled Code))
at com.eximtechnologies.ecserver.connection.XMSHTTPConnection.checkForNewMessages(XMSHTTPConnection.java(Compiled Code))
at com.eximtechnologies.ecserver.connection.XMSHTTPConnection.timeoutExpired(XMSHTTPConnection.java(Compiled Code))
at com.eximtechnologies.xmd.timer.TimerEvent$1.run(TimerEvent.java(Compiled Code))

Del error, se podría pensar que esto era sólo un problema de la red, pero el cliente nunca había experimentado el problema antes de que hace aproximadamente 2 meses, y AFAIK, no ha habido cambios en el diseño de la red.

También recibimos con bastante frecuencia:

java.net.SocketException: Connection timed out:could be due to invalid address
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:336)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:201)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:188)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.connect(Socket.java:428)
at java.net.Socket.<init>(Socket.java:335)
at java.net.Socket.<init>(Socket.java:210)
at javax.net.ssl.SSLSocket.<init>(Unknown Source)

Estoy sospechando de que este es un AIX problema, pero supongo que podría ser un problema de firewall? Yo también vi a algunas personas en las búsquedas de google haciendo alusión a un problema con commons http, pero no podía ver la forma en que se relaciona.

Es esto algo que otros han visto con AIX recientemente?

OriginalEl autor jsight | 2008-10-17

3 Kommentare

  1. 3

    «de java.net.SocketException: Socket cerrado» significa que el lado cerrado el socket. Usted dice que esto sucede cuando se intenta realizar una conexión SSL para su servidor. Sin embargo, el seguimiento de la pila sugiere que esto ocurre cuando HTTPClient intenta escribir una solicitud HTTP a través de una conexión ya establecida.

    Esto podría suceder si, por ejemplo, que de alguna manera se las arregló para hacer HTTPClient enviar una solicitud a través de una conexión que anteriormente estaba cerrada por HTTPClient, o, más probablemente, por algún otro código de su lado. Compruebe si tiene acceso el socket subyacente en algún lugar. O podría ser que el socket se cierra por el protocolo SSL/TLS protocolo (si no me equivoco, SSL/TLS tiene su propio protocolo de alto nivel para el cierre de la conexión subyacente), pero HTTPClient de alguna manera para que no se note que esta (no sé si es posible, pero, digamos, el lado remoto cierra la conexión SSL, pero estaba usando HTTP/1.1 conexiones persistentes y no establecer una Conexión: cerca de respuesta).

    Puede solucionar estos problemas mediante el análisis del tráfico TCP mediante tcpdump/Wireshark. Usted también puede iniciar una stunnel en una máquina que el servidor del puerto HTTPS, a continuación, hacer su código comunicarse con el servidor a través de HTTP plano a través de este túnel. Esto le permitirá ver el tráfico HTTP en texto sin formato.

    «de java.net.SocketException: Connection timed out» significa que la conexión TCP no se pudo establecer, debido a un tiempo de espera. Podría ser que los paquetes son descartados por un firewall. Por ejemplo, podría ser que usted necesita para utilizar un proxy HTTP para realizar las solicitudes HTTPS. También podría ser que el servidor está muy ocupado o la red está muy ocupado. De nuevo, le sugiero que pruebe tcpdump/Wireshark para ver lo que está pasando en el nivel de TCP.

    OriginalEl autor Alexander

  2. 0

    Yo he tenido problemas con el cliente http que fueron corregidos mediante el uso de un multiproceso de conexión. Lo fijado por el movimiento de la primera a la segunda de las siguientes configuraciones:

    <bean id="httpClient" class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor">
        <property name="httpClient">
            <bean class="org.apache.commons.httpclient.HttpClient">
                <property name="connectionTimeout"><value>1000</value></property>
                <property name="timeout"><value>3000</value></property>
            </bean>
        </property>
    </bean>
    
    <bean id="httpClient" class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor">
        <property name="httpClient">
            <bean class="org.apache.commons.httpclient.HttpClient">
                <property name="connectionTimeout"><value>1000</value></property>
                <property name="timeout"><value>3000</value></property>
                <property name="httpConnectionManager">
                  <bean class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager" destroy-method="shutdown">
                    <property name="params">
                      <bean class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
                        <property name="defaultMaxConnectionsPerHost" value="20" />
                      </bean>
                    </property>
                  </bean>
                </property>
            </bean>
        </property>
    </bean>

    OriginalEl autor Steve B.

  3. 0

    No me sorprendería si no funciona!

    el tiempo de espera especificado es el tiempo de espera para la obtención de conexión de la conexión especificada administrador y no el actual socket o tiempo de espera del servidor que necesita configuración diferente.

    OriginalEl autor shivarajan

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea