The ServletServerHttpRequest getLocalAddress and getRemoteAddress methods contain additional DNS queries. The servletRequest.getLocalName() method requests a hostname from an IP address, and the InetSocketAddress constructor calls InetAddress.getByName, which requests an IP address from a hostname.
It looks like these requests can be omitted if you use servletRequest.getLocalAddr() and servletRequest.getRemoteAddr() instead of get*Name() methods.
If DNS is not properly configured on the server, then the establishment of a websocket connection hangs (for a few seconds).
Problematic stack trace:
at java.net.Inet4AddressImpl.getHostByAddr(Native Method)
at java.net.InetAddress$2.getHostByAddr(InetAddress.java:933)
at java.net.InetAddress.getHostFromNameService(InetAddress.java:618)
at java.net.InetAddress.getHostName(InetAddress.java:560)
at java.net.InetAddress.getHostName(InetAddress.java:532)
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.populateLocalName(NioEndpoint.java:1506)
at org.apache.tomcat.util.net.SocketWrapperBase.getLocalName(SocketWrapperBase.java:277)
at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:478)
at org.apache.coyote.Request.action(Request.java:517)
at org.apache.catalina.connector.Request.getLocalName(Request.java:1357)
at org.apache.catalina.connector.RequestFacade.getLocalName(RequestFacade.java:1002)
at org.springframework.http.server.ServletServerHttpRequest.getLocalAddress(ServletServerHttpRequest.java:200)
at org.springframework.web.socket.server.standard.AbstractStandardUpgradeStrategy.upgrade(AbstractStandardUpgradeStrategy.java:116)
at org.springframework.web.socket.server.support.AbstractHandshakeHandler.doHandshake(AbstractHandshakeHandler.java:297)
at org.springframework.web.socket.server.support.WebSocketHttpRequestHandler.handleRequest(WebSocketHttpRequestHandler.java:178)
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
The impression is that these addresses are not even used by Spring, but are only needed to ensure the operation of the WebSocketSession methods getLocalAddress() and getRemoteAddress(), and we don't use these methods at all.
The
ServletServerHttpRequestgetLocalAddressandgetRemoteAddressmethods contain additional DNS queries. TheservletRequest.getLocalName()method requests ahostnamefrom an IP address, and theInetSocketAddressconstructor callsInetAddress.getByName, which requests an IP address from ahostname.It looks like these requests can be omitted if you use
servletRequest.getLocalAddr()andservletRequest.getRemoteAddr()instead ofget*Name()methods.If DNS is not properly configured on the server, then the establishment of a
websocketconnection hangs (for a few seconds).Problematic stack trace:
The impression is that these addresses are not even used by Spring, but are only needed to ensure the operation of the
WebSocketSessionmethodsgetLocalAddress()andgetRemoteAddress(), and we don't use these methods at all.