[Spambayes-checkins] spambayes/scripts sb_server.py, 1.21.4.2,
1.21.4.3
Tony Meyer
anadelonbrin at users.sourceforge.net
Wed Mar 23 00:14:46 CET 2005
Update of /cvsroot/spambayes/spambayes/scripts
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19581/scripts
Modified Files:
Tag: release_1_0-branch
sb_server.py
Log Message:
Backport two fixes:
Report connection errors with sb_server only once per hour unless verbose.
Connect with a blocking socket so that the connection will fail if appropriate.
Index: sb_server.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/scripts/sb_server.py,v
retrieving revision 1.21.4.2
retrieving revision 1.21.4.3
diff -C2 -d -r1.21.4.2 -r1.21.4.3
*** sb_server.py 15 Oct 2004 05:56:01 -0000 1.21.4.2
--- sb_server.py 22 Mar 2005 23:14:41 -0000 1.21.4.3
***************
*** 144,156 ****
self.set_terminator('\r\n')
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
try:
self.connect((serverName, serverPort))
except socket.error, e:
error = "Can't connect to %s:%d: %s" % (serverName, serverPort, e)
! print >>sys.stderr, error
self.lineCallback('-ERR %s\r\n' % error)
self.lineCallback('') # "The socket's been closed."
self.close()
!
def collect_incoming_data(self, data):
self.request = self.request + data
--- 144,183 ----
self.set_terminator('\r\n')
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
+ # create_socket creates a non-blocking socket. This is not great,
+ # because then socket.connect() will return errno 10035, because
+ # connect takes time. We then don't know if the connect call
+ # succeeded or not. With Python 2.4, this means that we will move
+ # into asyncore.loop(), and if the connect does fail, have a
+ # loop something like 'while True: log(error)', which fills up
+ # stdout very fast.
+ self.socket.setblocking(1)
try:
self.connect((serverName, serverPort))
except socket.error, e:
error = "Can't connect to %s:%d: %s" % (serverName, serverPort, e)
! # Some people have their system setup to check mail very
! # frequently, but without being clever enough to check whether
! # the network is available. If we continually print the
! # "can't connect" error, we use up lots of CPU and disk space.
! # To avoid this, if not verbose only print each distinct error
! # once per hour.
! # See also: [ 1113863 ] sb_tray eats all cpu time
! now = time.time()
! then = time.time() - 3600
! if error not in state.reported_errors or \
! options["globals", "verbose"] or \
! state.reported_errors[error] < then:
! print >>sys.stderr, error
!
! # Record this error in the list of ones we have seen this
! # session.
! state.reported_errors[error] = now
!
self.lineCallback('-ERR %s\r\n' % error)
self.lineCallback('') # "The socket's been closed."
self.close()
! else:
! self.socket.setblocking(0)
!
def collect_incoming_data(self, data):
self.request = self.request + data
***************
*** 672,675 ****
--- 699,705 ----
sys.exit()
+ # Remember reported errors.
+ self.reported_errors = {}
+
# Set up the statistics.
self.totalSessions = 0
More information about the Spambayes-checkins
mailing list