#c #sockets
#c #сокеты
Вопрос:
как мне изменить идентификатор сокета / FD после использования accept() ? допустим, я bind() на sockfd 3, а принятый клиент находится на sockfd 4, как мне изменить / переместить этот sockfd на 1000?
Операционная СИСТЕМА: Ubuntu
Комментарии:
1. Зачем вам это нужно?
2. У Дина есть хороший вопрос. Возможно, у вас есть веская причина (возможно, связанная с fork()), но, скорее всего, вы думаете, что это приведет к чему-то, чего не произойдет, или путает импорт fds с номерами портов….
3. я не думаю, что путаю fds с портами.
Ответ №1:
Вы все еще не указали ОС, поэтому я выберу * nix 🙂
Комментарии:
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 { //обычное клиентское соединение } теперь я могу легко различать типы клиентов 🙂