I don't know if you are aware of this, but the thread object and its members live not in the thread executed by its run() method but in the thread that created the QThread subclassed object (hence the socket lives in a different thread than the one operating on it). I don't know if it's important here, but it seems to be that you are not aware of that.
Bookmarks