I'm still testing it, but this seems to work so far:
for stream in listener.incoming(){
...
}
drop(listener);
does pretty much everything I need. Just putting it after the stream listener.
Per https://doc.rust-lang.org/std/net/struct.TcpListener.html
"The socket will be closed when the value is dropped."