@@ -343,6 +343,22 @@ def get_target_byte_order(self):
343
343
target = self .dbg .CreateTarget (inferior_exe_path )
344
344
return target .GetByteOrder ()
345
345
346
+ def is_port_opened (self ):
347
+ connect_port = self .port
348
+
349
+ err , retcode , cmd_output = self .run_platform_command (f"netstat -ltn | grep { connect_port } | grep LISTEN" )
350
+
351
+ self .assertTrue (
352
+ err .Success (),
353
+ "Failed to get opened tcp sockets: %s, retcode: %d"
354
+ % (err .GetCString (), retcode ),
355
+ )
356
+
357
+ if retcode == 0 :
358
+ return True
359
+ else :
360
+ return False
361
+
346
362
def launch_debug_monitor (self , attach_pid = None , logfile = None ):
347
363
if self .reverse_connect :
348
364
family , type , proto , _ , addr = socket .getaddrinfo (
@@ -401,15 +417,17 @@ def connect_to_debug_monitor(self, attach_pid=None):
401
417
MAX_CONNECT_ATTEMPTS = 10
402
418
403
419
while connect_attempts < MAX_CONNECT_ATTEMPTS :
404
- # Create a socket to talk to the server
405
- try :
406
- logger .info ("Connect attempt %d" , connect_attempts + 1 )
407
- self .sock = self .create_socket ()
408
- self ._server = Server (self .sock , server )
409
- return server
410
- except _ConnectionRefused as serr :
411
- # Ignore, and try again.
412
- pass
420
+ if self .is_port_opened ():
421
+ # Create a socket to talk to the server
422
+ try :
423
+ logger .info ("Connect attempt %d" , connect_attempts + 1 )
424
+ self .sock = self .create_socket ()
425
+ self ._server = Server (self .sock , server )
426
+ return server
427
+ except _ConnectionRefused as serr :
428
+ # Ignore, and try again.
429
+ pass
430
+
413
431
time .sleep (0.5 )
414
432
connect_attempts += 1
415
433
0 commit comments