To me, how blockading works seems to be pretty accurate. If you want to keep ships in a port, you have to surround the port and, normally, have more ships available than the port has. In some cases, such as Antwerp, it is easy for a relatively small fleet to keep the port blockaded. Other ports require multiple stacks which is realistic.

Think about it for a little bit from both the realistic and the game mechanics points of view. For realism, if you were to blockade San Francisco all you need to do is have ships about where the Golden Gate bridge is. For New York, you’d need a much larger force as it tends to be more open. From a game mechanic, the ships have exactly the same kind of zone of control as other military units. If you can’t park a single stack of troops next to a castle and keep everyone in, then you shouldn’t be able to with ships.

Unlike a siege where pickets surround the castle, a port requires the ships themselves to remain on station to intercept outbound ships. This is a big difference between a castle siege and a naval blockade. This is also fairly accurate. In both cases you’ve got a single spot that you really need to keep an eye on. For an army, it is easy to have a half dozen soldiers go out and keep an eye on the castle to see if anyone is trying to get out. Ships can’t send out scouts like this. As such, I don’t see this as a bug. It is just something that you have to take into account.

If you want to blockade a port, send a couple fleets to keep them in. If you don't have the ships to surround the port AND beat their fleet in a fight, odds are you wouldn't be able to blockade them in the real world either.