Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions logstash_async/transport.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@

from abc import ABC, abstractmethod
from typing import Iterator, Union
import fcntl
import json
import logging
import socket
import ssl
import struct
import termios
import time

from requests.auth import HTTPBasicAuth
import pylogbeat
Expand Down Expand Up @@ -122,9 +126,19 @@ def _convert_data_to_send(self, data):
def _close(self, force=False):
if not self._keep_connection or force:
if self._sock:
while not self._is_sock_write_buff_empty():
time.sleep(0.05)
self._sock.close()
self._sock = None

# ----------------------------------------------------------------------
def _is_sock_write_buff_empty(self):
socket_fd = self._sock.fileno()
buffer_size = struct.pack('I', 0)
ioctl_result = fcntl.ioctl(socket_fd, termios.TIOCOUTQ, buffer_size)
buffer_size = struct.unpack('I', ioctl_result)[0]
return not buffer_size

# ----------------------------------------------------------------------
def close(self):
self._close(force=True)
Expand Down