Hola, resulta que estoy estudiando las funciones de GMS para crear conexiones cliente/servidor y hasta ahora pensé que lo había logrado: consigo crear un servidor y un cliente y comunicarlos. Cuando reinicio el juego destruyo el servidor con network_destroy antes de volver a crear otro. Sin embargo, cuando trato de crearlo por segunda vez usando el mismo puerto, la función network_create_server falla. Y esto pasa solamente cuando tenía previamente un cliente conectado, es decir, si creo un servidor y lo destruyo antes de que un cliente se conecte, no tengo problemas en crear el servidor otra vez, pero si tenía un cliente conectado (incluso si ese cliente luego desaparece) entonces no puedo crear otra vez el servidor. Logré descubrir que si en el segundo intento de crear el servidor cambio a otro puerto entonces funciona, es decir, pareciera que el puerto que usé con el primer servidor cuando lo creé quedó "tomado"y no fue liberado con network_destroy. ¿Será que hay que hacer algo además de usar network_destroy para liberar el puerto, o será otro el problema?
¿También borras el socket del cliente? No sé si lo hagas, o puedes probar a borrar ambos. Creo que alguna vez leí que el socket debería ser destruído en el lado en el que fue creado, es decir, no era correcto destruír un socket de cliente desde el servidor, por ejemplo.
Gracias por responder penumbra. La verdad es que descubrí que cometí un error. El objeto o_servidor que se encarga de crear y destruir el socket del servidor es persistente y en su evento destroy destruye el socket mediante network_destroy, por lo que al inicio del juego destruyo cualquier instancia de ese objeto que pudiera quedar antes de crear otra nueva y así gatillar su evento destroy. Pensé que eso era suficiente, pero no caí en cuenta de que reiniciando el juego con game_restart incluso los objetos persistentes son removidos del juego, por lo que su evento destroy nunca es disparado. Por eso es que nunca se ejecutaba realmente el código para destruir el socket. Así que ahora lo que hago es destruir la instancia de o_servidor antes de hacer game_restart en vez de después y ahora funciona a la perfección. Espero que le sirva a alguien esta experiencia para que no le pase lo mismo con objetos persistentes cuando se reinicia el juego con game_restart.