sd was added to serverSet before the loop and in clients[freeClient].createClient(tempSocket) tempSocket is added to its own set with only itself in it.
I'm not 100% sure, but I think you need to add the TCP socket to a socket set first, and then call SDLNet_CheckSockets on the set, which returns the number of ready sockets in the set, at which point you would then call SDLNet_SocketReady on the server socket, after CheckSockets indicates that something is happening on the socket. This seems redundant to me, but SDLNet introduces a few of its own ideas to the whole convention of sockets as is. Keep us updated
I might try making it all one big socket set though.