はいTCPです。ざっとですが、こんな感じです。
通信ソケットはクラス化しています。
CServerSock{
  SOCKET m_Sock;
  recvfunc();
};
CServerSock SvSock[2];

AcceptFunc()
{
  int cnt = 0;
  while( 1 ){
    socket = accept(litensock,...);
    SvSock.m_Sock[cnt++] = socket; // B及びCのソケットを割り当て
    CreateThread(〜)で各m_Sock用のrecvスレッド(recvfunc)を生成。
  }
}

CServerSock::recvfunc()
{
  char buf[2048];
  while( 1 ){
    ret = recive( m_Sock, buf, len, 0 ); // このrecive後のbufの内容がB,Cごっちゃになります。
    if( ret == 0 || ret == SOCKET_ERROR ) break;
    ::SendMessage( m_hWnd, m_wMsg, (WPARAM)len, (LPARAM)buf ); 親ウインドウへ通知
  }
}
わかりずらいかもしれませんがよろしくお願いします。