spambayes/scripts sb_server.py, 1.21.4.2, 1.21.4.3

"Tony Meyer" <[email protected]>
Newsgroups gmane.mail.spam.spambayes.cvs
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.