LINUX.ORG.RU

C++ неблокирующие сокет

 , , ,


0

1

Всем привет начал изучать сокет и у меня вопросы.
Если кто имел опыт помогите плиз
Если описать в 2-х словах я использую библиотеку «set» чтобы облегчить работу с набором дескрипторов.

Я взял готовый пример и у меня получилось. Но дескриптор формируется автоматически, я думаю нужно научится значение дескриптора назначать самому. Клиент должен передать параметры а сервер должен назначит ему дескриптор не в произвольном порядке, что бы по данному дескриптору вести обмен информацией.
При подключении клиента на стороне сервера срабатывает функция «accept»

socklen_t addr_size;
set<int> clients;
...
while(1)
    {
     ....
     addr_size = sizeof(addr);
     sock = accept(listener, (struct sockaddr *)&addr, &addr_size);
     fcntl(sock, F_SETFL, O_NONBLOCK);
     clients.insert(sock);
}
sock = дескриптор
На стороне клиента функция connect
connect(sock, (struct sockaddr *)&addr, sizeof(addr));

Может нужно передать правильно struct?

сервер должен назначит ему дескриптор не в произвольном порядке, что бы по данному дескриптору вести обмен информацией

Что мешает вести обмен информацией по тому дескриптору который тебе дали?

anonymous
()
Ответ на: комментарий от anonymous

Я рад за вас, что вы достигли такого уровня программирования, когда можно посмотреть в высока и сказать «Чушь всякую пишите».

prostoR
() автор топика
Ответ на: комментарий от anonymous

Я думал о том что бы использовать дескриптор который мне дали. Для этого придется вести журнал регистрации. Я не хотел делать этого.

prostoR
() автор топика

Но дескриптор формируется автоматически, я думаю нужно научится значение дескриптора назначать самому. Клиент должен передать параметры а сервер должен назначит ему дескриптор не в произвольном порядке, что бы по данному дескриптору вести обмен информацией.

Неверно. Дескриптор клиенту выдает ядро его ОС, а не сервер, и его значение не принципиально. На стороне сервера все то же самое. Численно совпадать на клиенте-сервере они не обязаны, и вообще этот номер ничего не означает, просто уникальный идентификатор среди всех активных соединений тек.процесса. Правильно реализованный сервер после акцепта обычно запоминает номер дескриптора в какой-нибудь структуре, которая описывает сессию общения с клиентом, и хранит ее, пока соединение не закроется. Ты об этом еще не думал, поэтому взял просто сет интов как набор подкл.клиентов, в целом туда идешь.

anonymous
()
Ответ на: комментарий от prostoR

У тебя учебник хреновый, если не объясняет в деталях, что такое дескриптор.

anonymous
()
Ответ на: комментарий от anonymous

Вы мой пост читали? Гений науки! Вообще я написал, что пример в интернете нашел и он у меня работает. А вопрос у меня вполне конкретный.

prostoR
() автор топика
Ответ на: комментарий от prostoR

Вы мой пост читали?

Я читал. Ничего не понял. Программам (всем) не должно быть никакой разницы, какое числовое значение имеет дескриптор сокета.

я думаю нужно научится значение дескриптора назначать самому

Это невозможно. Можно сдублировать дескриптор, но вряд ли это то, что тебе нужно.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 2)

Я взял готовый пример и у меня получилось. Но дескриптор формируется автоматически, я думаю нужно научится значение дескриптора назначать самому

Как это ни странно - не нужно. Как уже писали выше, дескриптор - внутренняя сущность процесса, от его непосредственного значения обмен зависит никак

Deleted
()
Ответ на: комментарий от anonymous

Функции send и recv использует дескриптор как адрес отправителя или получателя. Ну если вы говорите что ядро системы назначает, тогда понятно.

prostoR
() автор топика
Ответ на: комментарий от anonymous

Спасибо за самый понятный и развернутый ответ. Да у меня были недопонимания про дескриптор, но я и написал в посте что учусь. И понял что двигаюсь в правильном направлении.
Всем спасибо кто сдержан к таким как я :).

prostoR
() автор топика
Ответ на: комментарий от prostoR

для кого написана тонна книг по сетевому программированию ? или это из разряда - смотрю в книгу, вижу фигу ?

anonymous
()

Как говаривал классик: «struct нужно передавать только правильно»

not_rj45
()
Ответ на: комментарий от anonymous

для кого написана тонна книг по сетевому программированию ? или это из разряда - смотрю в книгу, вижу фигу ?

Вы бы хоть представились(ник свой написали), может зарегистрировались, что бы понять вы по жизни такой негативный или только сейчас.
Для вас объясняю, тема для меня новая -> я прочитал (возможно что то упустил) -> не все понял -> спросил -> мне объяснили -> всем спасибо. По мне так нормальный процесс обучения.

Сейчас я сокет сервер поднял привязал к нему мускул и json, пока вопросов нет.

prostoR
() автор топика
Ответ на: комментарий от prostoR

явный феил в само
после пункта - спросил, должен следовать пункт начать сначала,
то есть перечитываете то что не поняли
и так с перерывами пока процесс само обучение не выйдет в профит
а именно
прочитал - понял
а прочитал - не понял - побежал по форумам спрашивать

anonymous
()
Ответ на: комментарий от anonymous

последний пункт явно для неудачников, то есть про вас, интересно как часто будете бегать и переспрашивать то что не поняли по форумам ?

anonymous
()

Рекомендую ознакомиться с фундаметальной работай Э.Танненбаума «Компьютерные сети».

Это, во-первых, поможет решить ваши текущие проблемы, а во-вторых, избавит от не совсем разумных вопросов в будущем.

trex6 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.