anchor.diff:      p.StartInfo.FileName <- fileName
       p.StartInfo.Arguments <- args
       p.StartInfo.WorkingDirectory <- workingDir
  +    
  +    match port with
  +        | Some x -> p.StartInfo.Environment.["FABLE_SERVER_PORT"] <- x
  +        | None -> ()
  +
       p.Start() |> ignore
       p
   
   let runProcess workingDir fileName args =
  -    let p = startProcess workingDir fileName args
  +    let p = startProcess workingDir fileName args None
       p.WaitForExit()
       match p.ExitCode with
       | 0 -> ()
  
positive.code:     startServer port -1 agent.Post <| fun listen ->
          Async.Start listen
          let workingDir = Directory.GetCurrentDirectory()
          let p = startProcess workingDir exec args
          Console.CancelKeyPress.Add (fun _ ->
              Server.stop port |> Async.RunSynchronously
              printfn "Killing process..."
  
negative.code:     with ex ->
          failwithf "Cannot convert arguments to dictionary: %A\n%s" argv ex.Message
  
  let getFreePort () =
      let l = Sockets.TcpListener(System.Net.IPAddress.Loopback, 0)
      l.Start()
      let port = (l.LocalEndpoint :?> IPEndPoint).Port
      l.Stop()
      port
  
  let getPortAndTimeout argsMap =
      let port =
          match Map.tryFind "port" argsMap with
          | Some "free" -> getFreePort()
          | Some port -> int port
          | None -> Constants.DEFAULT_PORT
      let timeout =
  