use SO_REUSEADDR to fix 'socket already in use' caused by TIME_WAIT of unclean socket close
cleanup