2010-09-17 8 views
0

Как изменить идентификатор сокета/FD после использования accept()? скажем, я привязываю() к sockfd 3, и принятый клиент находится на sockfd 4, как мне изменить/переместить этот sockfd на 1000?C++ Linux TCP-сокеты fd

ОС: Ubuntu

+3

Почему вы хотите это сделать? –

+1

У Дина есть хороший вопрос. У вас может быть веская причина (вероятно, с участием fork()), но, скорее всего, вы думаете, что он достигнет чего-то, чего не будет, или запутывает импорт fds с номерами портов .... –

+0

я не думаю Я запутываю fds с портами. – tenev

ответ

1

Тем не менее вы не указали ОС, так что я пойду с * Никс :) ​​

http://linux.die.net/man/2/dup2

+0

, который помогает много, но следующий - как я могу освободить ресурсы, связанные с исходным FD, не закрывая соединение - обычно close()? или dup2() делает это всегда автоматически? – tenev

+0

Привет, я только что протестировал dup2(), отлично работает для того, что мне нужно! – tenev

+0

вот что-то очень основное из того, что я сделал: // 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

Смежные вопросы