Are you using LabVIEW on both sides of the TCP communication or just on the client side? Also, when you say that the thread is left "active" on the server side, how are you verifying this and what do you mean by "active"?
The reason I ask is because I am curious whether you are actually seeing a problem or whether you are observing one of the unfortunate (albeit normal) symptoms of TCP. The way TCP termination works is that both sides agree a connection is done by telling each other that they are done sending. Suppose we have a connection, sides A and B. When side A closes, it sends a "FIN" to B. That FIN means that A is done sending. It says nothing about receiving. At this point, on side B, once all pending data has been read, reads will start failing. Side B may, however, continue to write. In fact, it successfully writes the data. The other side will usually respond with a "RST" (reset) -- telling side B that side A isn't accepting any more data. Thus the write on side B has apparently succeeded. Once B receives the RST, it knows that the other side is truly gone.
Hope this gives you some more insight into things, and if you still think you have a problem, please respond with further detail!
E. Sulzer
Applications Engineer
National Instruments