don't destroy socket on error/timeout
add id-based callback resolving
update version and socket lifecycle