简体   繁体   中英

servlet socket read timeout via reader

I am seeing this exception:

java.net.SocketTimeoutException: Timeout attempting to read data from the socket

Here's the code generating it:

    public static String extractBody(HttpServletRequest request) {
        StringBuffer sb = new StringBuffer();
        String line = null;
        try {
            //BufferedReader reader = request.getReader();
            BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
        } catch (Exception e) {
            logger.fatal("Failed to read from socket with content-length: {}", request.getHeader("Content-Length"));
            e.printStackTrace();
        }
        return sb.toString();
    }

When it happens, that content-length that's written is non-zero. It's like this

Failed to read from socket with content-length: 279645

What is causing this timeout? Is it that the socket was left unclosed by the client? Is there something else I am missing? Is there a different way I should be reading the body data from a servlet request? Most of the requests work fine, I only see this error sometimes but it may be a certain client version or platform or something.

content-length标头与实际的内容长度不匹配,它正在等待更多数据。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM