Я вижу, что некоторые приложения используют несколько сокетов. Например, для чата они используют уникальный сокет, а для загрузки файлов используют другой сокет и т. д. Зачем нужен этот процесс, если его можно выполнить в одном сокете? это потому, что они обрабатывают соединение и открывают новый слот соединения после каждого принятого вызова?
Я работаю над приложением чата IOCP, и я запутался в этой схеме. Если я хочу обрабатывать соединения, я делаю 1 сокет для каждого клиента, но если клиент отправляет файл, мой сервер не может выделить память для загрузки файла, потому что я делаю это после обработки вновь принятого соединения, поэтому становится сложно хранить память, необходимая для файлов в пуле памяти, особенно для очистки и освобождения памяти. Нужно ли мне перераспределять память на основе команд, если я использую 1 сокет только на стороне клиента, чтобы другие буферы не были перезаписаны? или самый простой способ - использовать 1 сокет для каждой операции, которая занимает много памяти, например, отправка файлов, изображения и т. д., чтобы мой сервер автоматически выделял уникальный буфер для каждого нового соединения?
И когда я должен использовать КРИТИЧЕСКИЕ СЕКЦИИ в IOCP? в рабочем потоке, если я хочу получить доступ к буферу после того, как я получил некоторые данные, скопируйте их в общий полученный буфер. Нужно ли мне вводить критические разделы, прежде чем копировать из временного буфера во весь буфер, чтобы другие потоки не мешали значениям?