Можно сделать переменную
чтобы не дёргать sizeof(buffer).
Ещё - в функции Work есть строка
send(Players[i].ID, buffer, strlen(buffer), NULL);
подумалось, что strlen(buffer) всегда будет равна result. но для utf я не уверен. это тоже к вопросу о целесообразности каждый раз дёргать функцию.