Repository: godot
Issue: Silent error with enet initialization order
Labels: documentation,topic:network

### Godot version

4.0.2

### System information

Windows 11 (Version 10.0.22621.1555)

### Issue description

With the current multiplayer API there is an implied order calls should be made, however if you call them in that order you get silent errors.

With the current APIs if you run have the below code to join a enet server it will not connect, nor will any `connection_failed` events be emitted
```gdscript
func start_server(port: int):
    multiplayer.multiplayer_peer = enet
    enet.create_server(port)
    print("Host started on ", port)
	
func join_server(address: String, port: int):
    multiplayer.multiplayer_peer = enet
    enet.create_client(address, port)
    print("attempt join ", address, " ", port)
```

However if you swap the order of the enet binding, and client creation it works fine
```gdscript
func start_server(port: int):
    enet.create_server(port)
    multiplayer.multiplayer_peer = enet
    print("Host started on ", port)

func join_server(address: String, port: int):
    enet.create_client(address, port)
    multiplayer.multiplayer_peer = enet
    print("attempt join ", address, " ", port)
```

Ideally there should be an error generated if the first case is intended to be an invalid use of the API, or at least clear warnings in the API about the order of execution required.

Also due to the fact that binding for error messages on an enet connection requires it to be done on the multiplayer object itself
```gdscript
multiplayer.connection_failed.connect(_conn_fail)
```
It kind of implies that you should be binding your enet instance to multiplayer before establishing the connection, because otherwise you'd be binding a error listener for a failed connection after you made the connection.

### Steps to reproduce

Having this script as a global for a project, then calling the `start_server` on one instance then `join_server` on the other will recreate this issue.
```gdscript
extends Node

var enet := ENetMultiplayerPeer.new()

func _ready():
	multiplayer.peer_connected.connect(_peer_connected)
	multiplayer.connection_failed.connect(_conn_fail)
	multiplayer.peer_disconnected.connect(_peer_disconnected)
	multiplayer.server_disconnected.connect(_server_disconnected)

func start_server(port: int):
	multiplayer.multiplayer_peer = enet
	enet.create_server(port)
	print("Host started on ", port)
	
func join_server(address: String, port: int):
	multiplayer.multiplayer_peer = enet
	enet.create_client(address, port)
	print("attempt join ", address, " ", port)
	
func _conn_fail():
	print("Failed to connect")
	pass
	
func _peer_connected(peer_id: int):
	print("peer connected ", peer_id)
	_add_player(peer_id)
	
func _peer_disconnected(peer_id: int):
	print("peer disconnected ", peer_id)
	
func _server_disconnected(peer_id: int):
	print("peer disconnected ", peer_id)
```

### Minimal reproduction project

In the minimal godot project attached below simply start two instances, on one of them click host, and the other click join - and you will see that in the debug logs there is no peer connected print line.

[minimal-enet-init-error-project.zip](https://github.com/godotengine/godot/files/11302731/minimal-enet-init-error-project.zip)