diff -ur v4/sock_ut.py v5/sock_ut.py --- v4/sock_ut.py 2021-06-28 19:46:14.000000000 +0900 +++ v5/sock_ut.py 2021-06-30 04:15:08.000000000 +0900 @@ -62,6 +62,7 @@ # srv=name # port=xxx,srv=name,id=xxx +# kill=name # kill_base_srv # name @@ -70,8 +71,11 @@ return {} return dict( map( lambda t: t.split( '=' ), s.split( ',' ) ) ) -def is_srv_dic( d ): - return len( d ) == 1 and 'srv' in d +is_key_dic = lambda d, k: len( d ) == 1 and k in d + +is_srv_dic = lambda d: is_key_dic( d, 'srv' ) + +is_kill_dic = lambda d: is_key_dic( d, 'kill' ) def is_accept_dic( d ): ks = [ 'port', 'srv', 'id' ] @@ -91,6 +95,8 @@ dbg.out( 'srv {} start'.format( name ) ) while True: s = q.get() + if s == 'kill': + break if not send_str( sc, s ): break @@ -141,6 +147,12 @@ elif is_accept_dic( d ): base_th_accept( sc, s ) + elif is_kill_dic( d ): + name = d.get( 'kill' ) + if name in srvs: + q = srvs.get( name ) + q.put( 'kill' ) + elif s == 'kill_base_srv': ev_quit.set() send_str( sc, 'next' ) @@ -267,6 +279,15 @@ return None return cs +def kill_srv( port, name ): + cs = port_conn( port ) + if not cs: + return + s = 'kill=' + name + #dbg.out( s ) + send_str( cs, s ) + cs.close() + def kill_base_srv( port ): cs = port_conn( port ) if not cs: @@ -289,6 +310,7 @@ 'port cli upper word word word ...', 'port cli eval word word word ...', 'port kill_base', + 'port kill srv_name ( srv_name is upper, eval or ... )' ] dbg.help_exit( '\n'.join( lst ) ) @@ -333,6 +355,10 @@ break dbg.out( '{} --> {}'.format( w, r ) ) sc.close() + elif cmd == 'kill': + name = pop() + kill_srv( port, name ) + elif cmd == 'kill_base': kill_base_srv( port )