Работа сокетов, accept, recv, send. Возможна ли работа в одном потоке?
Хочу сделать так, чтобы приложение совмещало функционал сервера и клиента: создаю сокет для listen(), жду клиентов, с помощью accept() создаю каждому клиенту отдельный сокет, в него хочу отправлять данные и получать из него.
Проблемы: acсept() блокирует свой thread, пришлось вынести в отдельный, хотелось бы оставить в основном thread. Возможно ли это сделать не теряя "заявки" от будущих участников? recv() блокирует thread, будут ли потери данных, если я не буду делать recv() некоторое время? Т.е. буду чередовать recv() и send() периодически, не создавая для них отдельные thread? Нужно ли для каждого сокета создавать отдельный экземпляр структуры SOCKADDR_IN или можно менять содержимое и продолжать ссылаться на него при работе с новосозданными сокетами?
/Планируется, что при первом подключении нового клиента ему будет отослан список активных клиентов, он примет, сравнит со своим, сам добавит тех, которых у него нет. Не уверен, но кажется, что это называют P2P. В приложении происходят некоторые изменения, как только они происходят, нужно каждому активному клиенту сообщить об этом. И так будет делать каждый участник, каждый отправляет о себе каждому другому. Нужно асинхронно отправлять и принимать данные/
Какую литературу посоветуете на эту тему? На русском, либо на английском с картинками.