1061 Public method implementing our event loop. |
1061 Public method implementing our event loop. |
1062 |
1062 |
1063 @param disablePolling flag indicating to enter an event loop with |
1063 @param disablePolling flag indicating to enter an event loop with |
1064 polling disabled (boolean) |
1064 polling disabled (boolean) |
1065 """ |
1065 """ |
1066 self.eventExit = None |
1066 self.eventExit = False |
1067 self.pollingDisabled = disablePolling |
1067 self.pollingDisabled = disablePolling |
1068 |
1068 selectErrors = 0 |
1069 while self.eventExit is None: |
1069 |
|
1070 while not self.eventExit: |
1070 wrdy = [] |
1071 wrdy = [] |
1071 |
1072 |
1072 if self.writestream.nWriteErrors > self.writestream.maxtries: |
1073 if self.writestream.nWriteErrors > self.writestream.maxtries: |
1073 break |
1074 break |
1074 |
1075 |
1079 wrdy.append(self.errorstream) |
1080 wrdy.append(self.errorstream) |
1080 |
1081 |
1081 try: |
1082 try: |
1082 rrdy, wrdy, xrdy = select.select([self.readstream], wrdy, []) |
1083 rrdy, wrdy, xrdy = select.select([self.readstream], wrdy, []) |
1083 except (select.error, KeyboardInterrupt, socket.error): |
1084 except (select.error, KeyboardInterrupt, socket.error): |
1084 # just carry on |
1085 selectErrors += 1 |
1085 continue |
1086 if selectErrors <= 10: # arbitrarily selected |
1086 |
1087 # just carry on |
|
1088 continue |
|
1089 else: |
|
1090 # give up for too many errors |
|
1091 break |
|
1092 |
|
1093 # reset the select error counter |
|
1094 selectErrors = 0 |
|
1095 |
1087 if self.readstream in rrdy: |
1096 if self.readstream in rrdy: |
1088 error = self.readReady(self.readstream) |
1097 error = self.readReady(self.readstream) |
1089 if error: |
1098 if error: |
1090 break |
1099 break |
1091 |
1100 |
1093 self.writeReady(self.writestream) |
1102 self.writeReady(self.writestream) |
1094 |
1103 |
1095 if self.errorstream in wrdy: |
1104 if self.errorstream in wrdy: |
1096 self.writeReady(self.errorstream) |
1105 self.writeReady(self.errorstream) |
1097 |
1106 |
1098 self.eventExit = None |
1107 self.eventExit = False |
1099 self.pollingDisabled = False |
1108 self.pollingDisabled = False |
1100 |
1109 |
1101 def eventPoll(self): |
1110 def eventPoll(self): |
1102 """ |
1111 """ |
1103 Public method to poll for events like 'set break point'. |
1112 Public method to poll for events like 'set break point'. |