I have the idle timeout set to 60 minutes. However, tests with a Python client talking to a Python server, the connection resets by peer approx 5 mins of inactivity when sending POST. The activity is still happening on the server side even after connection is reset or disconnected.
import requests
import logging
import flask
from flask import Flask
app = Flask(__name__)
logging.basicConfig(level=logging.INFO, format=f'%(asctime)s %(levelname)s %(name)s %(threadName)s : %(message)s')
@app.before_first_request
def before_first_request():
app.logger.info("before_first_request")
@app.before_request
def before_request():
app.logger.info("before_request")
@app.route('/run', methods=['POST'])
def run(redirect_url="",additional_testng_parameters=""):
url = "http://192.168.1.8:7070/" + "run"
app.logger.info("url is:" + url)
session = requests.Session()
app.logger.info("Request placed for " + url)
response = "Text"
try:
response = session.post(url=url, timeout=3600)
resultdata = response.headers['Content-Type']
app.logger.info("Response received for : " + url + " is:" + str(response.status_code))
app.logger.info("Response received for : " + url + " is:" + str(resultdata))
response = make_response("Execution is successful")
except Exception as err:
app.logger.error(err)
return response
@app.errorhandler(Exception)
def server_error(err):
app.logger.exception(err)
return "There is some error on Test Invoker side", 500
if __name__ == '__main__':
from waitress import serve
serve(app, host="0.0.0.0", port=8080)
Roughly after 5 minutes getting below error message
ERROR app waitress-0 : ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
Below are few references but it does not resolve my problem
https://www.pythonfixing.com/2022/01/fixed-aborted-remotedisconnected-end.html
RESOLVED Below piece of code helped me to resolve the problem
import socket
from urllib3.connection import HTTPConnection
HTTPConnection.default_socket_options = (
HTTPConnection.default_socket_options + [
(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),
(socket.SOL_TCP, socket.TCP_KEEPIDLE, 45),
(socket.SOL_TCP, socket.TCP_KEEPINTVL, 10),
(socket.SOL_TCP, socket.TCP_KEEPCNT, 6)
]
)