Как изменить идентификатор сокета/FD после использования accept()? скажем, я привязываю() к sockfd 3, и принятый клиент находится на sockfd 4, как мне изменить/переместить этот sockfd на 1000?C++ Linux TCP-сокеты fd
ОС: Ubuntu
Как изменить идентификатор сокета/FD после использования accept()? скажем, я привязываю() к sockfd 3, и принятый клиент находится на sockfd 4, как мне изменить/переместить этот sockfd на 1000?C++ Linux TCP-сокеты fd
ОС: Ubuntu
Тем не менее вы не указали ОС, так что я пойду с * Никс :)
, который помогает много, но следующий - как я могу освободить ресурсы, связанные с исходным FD, не закрывая соединение - обычно close()? или dup2() делает это всегда автоматически? – tenev
Привет, я только что протестировал dup2(), отлично работает для того, что мне нужно! – tenev
вот что-то очень основное из того, что я сделал: // my acceptsock = accpet(); if (check is admin ip) { int oldsock = acceptsock; // копировать с получения sockfd (accept-low free) на пользовательский sockfd acceptsock = dup2 (oldsock, 800 + serverconnections); // добавьте acceptsock в мой fd_set в потоке, где данные администратора // обрабатывается // освободить ресурсы accept() sockfd // закрыть - не закрывает соединение! идеально! закрыть (oldsock); } else { // нормальное подключение к клиенту } Теперь я могу легко отличить типы клиентов :) – tenev
Почему вы хотите это сделать? –
У Дина есть хороший вопрос. У вас может быть веская причина (вероятно, с участием fork()), но, скорее всего, вы думаете, что он достигнет чего-то, чего не будет, или запутывает импорт fds с номерами портов .... –
я не думаю Я запутываю fds с портами. – tenev