Troubleshooting SocketException: Bad file descriptor

59 Views Asked by At

I have a Spring Boot Java Application (running locally) that is attempting an HTTP connection (via RestTemplate and Apache HTTP Components) to a locally running Wiremock (running on Port 8081). The Java application receives a java.net.SocketException: Bad file descriptor when attempting the connection.

Here is the stacktrace:


org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://localhost:8081/search": Bad file descriptor; nested exception is java.net.SocketException: Bad file descriptor
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:791) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:738) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:647) ~[spring-web-5.3.31.jar:5.3.31]
    at com.core.Job.execute(IncrementalJob.java:25) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.3.31.jar:5.3.31]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.3.31.jar:5.3.31]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.31.jar:5.3.31]
    at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115) ~[spring-aop-5.3.31.jar:5.3.31]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
Caused by: java.net.SocketException: Bad file descriptor
    at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
    at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[na:na]
    at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:554) ~[na:na]
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:602) ~[na:na]
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na]
    at java.base/java.net.Socket.connect(Socket.java:633) ~[na:na]
    at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.14.jar:4.5.14]
    at org.springframework.http.client.HttpComponentsClientHttpRequest.executeInternal(HttpComponentsClientHttpRequest.java:87) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.http.client.BufferingClientHttpRequestWrapper.executeInternal(BufferingClientHttpRequestWrapper.java:63) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:109) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:77) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66) ~[spring-web-5.3.31.jar:5.3.31]
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:782) ~[spring-web-5.3.31.jar:5.3.31]
    ... 21 common frames omitted

To troubleshoot it further, I analyzed traffic to and from port 8081 (wiremock port) and this is what I got:

23  2024-02-16 23:13:10.857186  0.003395    127.0.0.1   127.0.0.1   TCP 68  63930 → 8081 [SYN] Seq=0 Win=65535 Len=0 MSS=16344 WS=64 TSval=682307454 TSecr=0 SACK_PERM
24  2024-02-16 23:13:10.857436  0.000250    127.0.0.1   127.0.0.1   TCP 68  8081 → 63930 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=16344 WS=64 TSval=4179054767 TSecr=682307454 SACK_PERM
25  2024-02-16 23:13:10.857467  0.000031    127.0.0.1   127.0.0.1   TCP 56  63930 → 8081 [ACK] Seq=1 Ack=1 Win=408256 Len=0 TSval=682307455 TSecr=4179054767
26  2024-02-16 23:13:10.857488  0.000021    127.0.0.1   127.0.0.1   TCP 56  [TCP Window Update] 8081 → 63930 [ACK] Seq=1 Ack=1 Win=408256 Len=0 TSval=4179054767 TSecr=682307455
27  2024-02-16 23:13:10.857785  0.000297    127.0.0.1   127.0.0.1   TCP 56  63930 → 8081 [FIN, ACK] Seq=1 Ack=1 Win=408256 Len=0 TSval=682307455 TSecr=4179054767
28  2024-02-16 23:13:10.857823  0.000038    127.0.0.1   127.0.0.1   TCP 56  8081 → 63930 [ACK] Seq=1 Ack=2 Win=408256 Len=0 TSval=4179054767 TSecr=682307455
29  2024-02-16 23:13:10.858462  0.000639    127.0.0.1   127.0.0.1   TCP 56  8081 → 63930 [FIN, ACK] Seq=1 Ack=2 Win=408256 Len=0 TSval=4179054769 TSecr=682307455
30  2024-02-16 23:13:10.858508  0.000046    127.0.0.1   127.0.0.1   TCP 56  63930 → 8081 [ACK] Seq=2 Ack=2 Win=408256 Len=0 TSval=682307457 TSecr=4179054769

I don't see the request showing in the above. Are there any pointers on what could be leading to the failure? Please excuse me if my question is naive. I am new to Wireshark and not good at networking.

0

There are 0 best solutions below