[GH-ISSUE #46] Still hangs on bad internet connection #21

Closed
opened 2026-10-13 19:45:54 +00:00 by bsakaguchi · 1 comment
Owner

Originally created by @werwolfby on GitHub (Mar 7, 2016).
Original GitHub issue: https://github.com/werwolfby/monitorrent/issues/46

Originally assigned to: @werwolfby on GitHub.

Socket by some reason hangs on some requests.
The issues was reproduced with lostfilm plugin and had next stacktrace:

  File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 513, in execute
    episodes = self._prepare_request(serie)
  File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 574, in _prepare_request
    parsed_url = self.tracker.parse_url(topic.url, True)
  File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 212, in parse_url
    r = requests.get(url, headers=self._headers, allow_redirects=False)
  File "/usr/lib/python2.7/site-packages/requests/api.py", line 67, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/api.py", line 53, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 376, in send
    timeout=timeout
  File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 559, in urlopen
    body=body, headers=headers)
  File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 376, in _make_request
    httplib_response = conn.getresponse(buffering=True)
  File "/usr/lib/python2.7/httplib.py", line 1132, in getresponse
    response.begin()
  File "/usr/lib/python2.7/httplib.py", line 453, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python2.7/httplib.py", line 409, in _read_status
    line = self.fp.readline(_MAXLINE + 1)
  File "/usr/lib/python2.7/socket.py", line 480, in readline
    data = self._sock.recv(self._rbufsize)

And

  File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 506, in execute
    if not self._execute_login(engine):
  File "/var/www/monitorrent/monitorrent/plugins/trackers/__init__.py", line 273, in _execute_login
    if not self.verify():
  File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 497, in verify
    return self.tracker.verify()
  File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 195, in verify
    r1 = requests.get('http://www.lostfilm.tv/my.php', headers=self._headers, cookies=cookies)
  File "/usr/lib/python2.7/site-packages/requests/api.py", line 67, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/api.py", line 53, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 608, in send
    r.content
  File "/usr/lib/python2.7/site-packages/requests/models.py", line 737, in content
    self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes()
  File "/usr/lib/python2.7/site-packages/requests/models.py", line 660, in generate
    for chunk in self.raw.stream(chunk_size, decode_content=True):
  File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/response.py", line 340, in stream
    for line in self.read_chunked(amt, decode_content=decode_content):
  File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/response.py", line 489, in read_chunked
    chunk = self._handle_chunk(amt)
  File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/response.py", line 449, in _handle_chunk
    value = self._fp._safe_read(amt)
  File "/usr/lib/python2.7/httplib.py", line 703, in _safe_read
    chunk = self.fp.read(min(amt, MAXAMOUNT))
  File "/usr/lib/python2.7/socket.py", line 384, in read
    data = self._sock.recv(left)

Looks like there is some issue with sockets. In case of bad connection when it starts receive packages from lostfilm and connection was broken it hangs on socket.recv method.

Can be solved by introducing and use timeout for requests.

Originally created by @werwolfby on GitHub (Mar 7, 2016). Original GitHub issue: https://github.com/werwolfby/monitorrent/issues/46 Originally assigned to: @werwolfby on GitHub. Socket by some reason hangs on some requests. The issues was reproduced with lostfilm plugin and had next stacktrace: ``` File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 513, in execute episodes = self._prepare_request(serie) File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 574, in _prepare_request parsed_url = self.tracker.parse_url(topic.url, True) File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 212, in parse_url r = requests.get(url, headers=self._headers, allow_redirects=False) File "/usr/lib/python2.7/site-packages/requests/api.py", line 67, in get return request('get', url, params=params, **kwargs) File "/usr/lib/python2.7/site-packages/requests/api.py", line 53, in request return session.request(method=method, url=url, **kwargs) File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 468, in request resp = self.send(prep, **send_kwargs) File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 576, in send r = adapter.send(request, **kwargs) File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 376, in send timeout=timeout File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 559, in urlopen body=body, headers=headers) File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 376, in _make_request httplib_response = conn.getresponse(buffering=True) File "/usr/lib/python2.7/httplib.py", line 1132, in getresponse response.begin() File "/usr/lib/python2.7/httplib.py", line 453, in begin version, status, reason = self._read_status() File "/usr/lib/python2.7/httplib.py", line 409, in _read_status line = self.fp.readline(_MAXLINE + 1) File "/usr/lib/python2.7/socket.py", line 480, in readline data = self._sock.recv(self._rbufsize) ``` And ``` File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 506, in execute if not self._execute_login(engine): File "/var/www/monitorrent/monitorrent/plugins/trackers/__init__.py", line 273, in _execute_login if not self.verify(): File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 497, in verify return self.tracker.verify() File "/var/www/monitorrent/monitorrent/plugins/trackers/lostfilm.py", line 195, in verify r1 = requests.get('http://www.lostfilm.tv/my.php', headers=self._headers, cookies=cookies) File "/usr/lib/python2.7/site-packages/requests/api.py", line 67, in get return request('get', url, params=params, **kwargs) File "/usr/lib/python2.7/site-packages/requests/api.py", line 53, in request return session.request(method=method, url=url, **kwargs) File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 468, in request resp = self.send(prep, **send_kwargs) File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 608, in send r.content File "/usr/lib/python2.7/site-packages/requests/models.py", line 737, in content self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes() File "/usr/lib/python2.7/site-packages/requests/models.py", line 660, in generate for chunk in self.raw.stream(chunk_size, decode_content=True): File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/response.py", line 340, in stream for line in self.read_chunked(amt, decode_content=decode_content): File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/response.py", line 489, in read_chunked chunk = self._handle_chunk(amt) File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/response.py", line 449, in _handle_chunk value = self._fp._safe_read(amt) File "/usr/lib/python2.7/httplib.py", line 703, in _safe_read chunk = self.fp.read(min(amt, MAXAMOUNT)) File "/usr/lib/python2.7/socket.py", line 384, in read data = self._sock.recv(left) ``` Looks like there is some issue with sockets. In case of bad connection when it starts receive packages from lostfilm and connection was broken it hangs on _socket.recv_ method. Can be solved by introducing and use timeout for requests.
Author
Owner
<!-- gh-comment-id:195861958 --> @werwolfby commented on GitHub (Mar 13, 2016): Some comments: http://stackoverflow.com/questions/5686490/detect-socket-hangup-without-sending-or-receiving http://twistedmatrix.com/trac/wiki/FrequentlyAskedQuestions#WhyisntmyconnectionLostmethodcalled
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
werwolfby/monitorrent#21
No description provided.