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.