@@ -130,12 +130,13 @@ def purgeOld():
130
130
131
131
sched .add_job (purgeOld , "interval" , seconds = 60 , coalesce = True , max_instances = 1 )
132
132
133
+
133
134
# Returns ping time in seconds (up), False (down), or None (error).
134
- def serverUp (address , port ):
135
+ def serverUp (info ):
135
136
try :
136
- sock = socket .socket (socket . AF_INET , socket . SOCK_DGRAM )
137
+ sock = socket .socket (info [ 0 ], info [ 1 ], info [ 2 ] )
137
138
sock .settimeout (3 )
138
- sock .connect (( address , port ) )
139
+ sock .connect (info [ 4 ] )
139
140
buf = b"\x4f \x45 \x74 \x03 \x00 \x00 \x00 \x01 "
140
141
sock .send (buf )
141
142
start = time .time ()
@@ -225,26 +226,29 @@ def finishRequestAsync(server):
225
226
226
227
227
228
def asyncFinishThread (server ):
228
- if "address" in server and server ["address" ] != "" :
229
- try :
230
- info = socket .getaddrinfo (server ["address" ], server ["port" ])
231
- except :
232
- app .logger .warning ("Unable to get address info for %s." % (server ["address" ],))
233
- return
229
+ checkAddress = False
230
+ if not "address" in server or not server ["address" ]:
231
+ server ["address" ] = server ["ip" ]
232
+ else :
233
+ checkAddress = True
234
+
235
+ try :
236
+ info = socket .getaddrinfo (server ["address" ],
237
+ server ["port" ],
238
+ type = socket .SOCK_DGRAM ,
239
+ proto = socket .SOL_UDP )
240
+ except socket .gaierror :
241
+ app .logger .warning ("Unable to get address info for %s." % (server ["address" ],))
242
+ return
243
+
244
+ if checkAddress :
234
245
addresses = set (data [4 ][0 ] for data in info )
235
- found = False
236
- for addr in addresses :
237
- if server ["ip" ] == addr :
238
- found = True
239
- break
240
- if not found :
246
+ if not server ["ip" ] in addresses :
241
247
app .logger .warning ("Invalid IP %s for address %s (address valid for %s)."
242
248
% (server ["ip" ], server ["address" ], addresses ))
243
249
return
244
- else :
245
- server ["address" ] = server ["ip" ]
246
250
247
- server ["ping" ] = serverUp (server [ "address" ], server [ "port" ])
251
+ server ["ping" ] = serverUp (info [ 0 ])
248
252
if not server ["ping" ]:
249
253
app .logger .warning ("Server %s:%d has no ping."
250
254
% (server ["address" ], server ["port" ]))
0 commit comments