Skip to content

Commit cb4477b

Browse files
authored
Update udp.py
Added additional error handling for udp streams, and automatic retry for endpoint connections
1 parent 1e1e246 commit cb4477b

File tree

1 file changed

+31
-7
lines changed

1 file changed

+31
-7
lines changed

estreamer/streams/udp.py

+31-7
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
#*********************************************************************/
1818

1919
import socket
20+
import time
21+
import estreamer.crossprocesslogging as logging
2022
from estreamer.common.convert import isInt
2123
from estreamer.streams.base import Base
2224

@@ -38,26 +40,48 @@ def __init__( self, host, port, encoding = 'utf-8' ):
3840
self.encoding = encoding
3941
self.socket = None
4042

41-
43+
self.logger = logging.getLogger( self.__class__.__name__ )
4244

4345
def __connect( self ):
44-
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
45-
self.socket.connect( ( self.host, self.port) )
4646

4747

48+
while True :
49+
try:
50+
51+
self.logger.debug('Connecting to {0}:{1}'.format(self.host, self.port ))
52+
53+
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
54+
self.socket.connect((self.host,self.port))
55+
break
56+
57+
except OSError as ose :
58+
59+
self.logger.error( "Socket Connection Error [{2}] - Cannot connect to host {0}:{1} - Retrying ...".format(self.host,self.port, ose))
60+
time.sleep(2)
4861

4962
def close( self ):
5063
try:
5164
self.socket.shutdown( socket.SHUT_RDWR )
5265
self.socket.close()
66+
self.socket = None
5367

5468
except AttributeError:
5569
pass
5670

71+
def write( self, data ):
72+
73+
while True :
74+
if self.socket is None:
75+
self.__connect()
5776

77+
else :
78+
try:
79+
self.logger.debug('Sending {2} to {0}:{1}'.format(self.host, self.port , data))
80+
self.socket.sendall( data.encode( self.encoding ) )
81+
break
5882

59-
def write( self, data ):
60-
if self.socket is None:
61-
self.__connect()
83+
except OSError as ex:
84+
self.logger.error("Error [{0}] writing to endpoint {1}:{2} -- Retrying...".format(ex, self.host, self.port))
85+
time.sleep(1)
86+
self.socket = None
6287

63-
self.socket.send( data.encode( self.encoding ) )

0 commit comments

Comments
 (0)