C Linux TCP sockets fd

#c #sockets

#c #сокеты

Вопрос:

как мне изменить идентификатор сокета / FD после использования accept() ? допустим, я bind() на sockfd 3, а принятый клиент находится на sockfd 4, как мне изменить / переместить этот sockfd на 1000?

Операционная СИСТЕМА: Ubuntu

Комментарии:

1. Зачем вам это нужно?

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

3. я не думаю, что путаю fds с портами.

Ответ №1:

Вы все еще не указали ОС, поэтому я выберу * nix 🙂

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

Комментарии:

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

2. вот что-то очень простое из того, что я сделал: //мой acceptsock=accpet(); если (проверить ip администратора) { int oldsock=acceptsock; //скопируйте из принимающего sockfd (accept-самый низкий бесплатный) в пользовательский sockfd acceptsock=dup2(oldsock,800 serverconnections); //добавьте acceptsock в мой fd_set в потоке, где обрабатываются данные администратора //освободите ресурсы accept() sockfd //закройте — не не закрывает соединение! идеально! закрыть (oldsock); } else { //обычное клиентское соединение } теперь я могу легко различать типы клиентов 🙂