I'm a bit confused as to what the actual questions are, so this might not be exactly what you wanted.
Anyway, from what I understand, your first question relates to the order that data is received.
CAsyncSocket don't have blocking by default. This means that when you send or receive data, you don't have to wait for all the data to be sent or received before control is returned to your program.
So, if you have two sockets to send data to another computer, and you send a 5MB and a 1MB file at the same time, the 1MB file should be completed first, since it is a lot smaller.
If you enabled blocking for the sockets, then it depends on the order that the files are sent. If you sent the 5MB file first, then your program will send the file, wait for the transfer to complete, and then you would send the 1MB file. The vice versa is true as well.
QUOTE
I really need multithreading?
No, you really shouldn't use multi threading for TCP. Using a nonblocking socket will generally provide better performance, with a lower memory footprint.
QUOTE
But if I send through 2 sockets
Generally, if you are only sending data between two computers, you do not need to have more then one socket. You are more then likely limited based on the computers upload speed. By sending one file at a time, you will reduce the load on the TCP/IP stack, yet the transfer should still finish in about the same amount of time.