Skip to content

Commit 8d98346

Browse files
authored
Catch errors on TCP/UDP socket closing to prevent requeuing of events (#100)
Relates to #98.
1 parent 7f9a507 commit 8d98346

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

logstash_async/transport.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,7 @@ def _close(self, force=False):
135135
if self._sock:
136136
try:
137137
self._wait_for_socket_buffer_empty()
138-
self._sock.shutdown(socket.SHUT_WR)
139-
self._sock.close()
138+
self._try_to_close_socket()
140139
finally:
141140
self._sock = None
142141

@@ -162,6 +161,19 @@ def _is_sock_write_buff_empty(self):
162161
buffer_size = struct.unpack('I', ioctl_result)[0]
163162
return not buffer_size
164163

164+
# ----------------------------------------------------------------------
165+
def _try_to_close_socket(self):
166+
try:
167+
self._sock.shutdown(socket.SHUT_WR)
168+
self._sock.close()
169+
except Exception as exc:
170+
self._log_close_socket_error(exc)
171+
172+
# ----------------------------------------------------------------------
173+
def _log_close_socket_error(self, exc):
174+
msg = f'Error on closing the transport socket: {exc}'
175+
logger.warning(msg)
176+
165177
# ----------------------------------------------------------------------
166178
def close(self):
167179
self._close(force=True)

0 commit comments

Comments
 (0)