move NullDataCallback.
change how socket ownership works. fix possible bugs around that.
throw assertion error if connect callback is invoked twice. Switch to future?