@@ -61,15 +61,10 @@ QUEUE_READ = 0, QUEUE_WRITE = 2 }; #define QUEUE_ACTION (QUEUE_ADD | QUEUE_REMOVE) -#ifdef __wii__ -/* FIXME: Add a port registry for Wii */ -static uint16_t freePort = 65535; -#endif - @implementation OFKernelEventObserver + (void)initialize { if (self != [OFKernelEventObserver class]) return; @@ -133,11 +128,11 @@ _cancelAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); # ifdef __wii__ _cancelAddr.sin_len = 8; /* The Wii does not accept port 0 as "choose any free port" */ - _cancelAddr.sin_port = freePort--; + _cancelAddr.sin_port = of_socket_port_find(SOCK_DGRAM); # endif if (bind(_cancelFD[0], (struct sockaddr*)&_cancelAddr, sizeof(_cancelAddr))) @throw [OFInitializationFailedException @@ -166,10 +161,14 @@ - (void)dealloc { close(_cancelFD[0]); if (_cancelFD[1] != _cancelFD[0]) close(_cancelFD[1]); + +#ifdef __wii__ + of_socket_port_free(_cancelAddr.sin_port, SOCK_DGRAM); +#endif [_readObjects release]; [_writeObjects release]; [_queue release]; [_queueActions release];