Я некоторое время программировал на C ++, но я новичок в сетевом программировании, и мне неясно, в чем состоит пара вещей, так что это вопрос из трех частей.
В примерах приложений я видел вызов send () для одного сокета, проверку его возвращаемого значения, а затем сразу же после вызова recv () для того же сокета. Однако я нахожу это странным, так как recv () не вызывается до тех пор, пока не отправлено send (), поэтому нет ли риска, что ответное сообщение поступит до вызова recv? Если это так, действительно ли это проблема или сообщение будет зависать в подвешенном состоянии до тех пор, пока не будет вызван recv, и оно не будет получено?
Я хочу написать класс, который взаимодействует с сервером и может делать несколько различных запросов к серверу, с одной функцией для каждой, которая отправляет запрос, а затем ожидает ответа. Мой клиент будет иметь экземпляр этого класса в качестве члена. Учитывая, что send () и recv () блокируют вызовы, даже если я создаю отдельный поток для сетевых коммуникаций, как я могу остановить все сетевые коммуникации от остановки во время ожидания ответа на один запрос? Если произойдет сбой одного сообщения, пока не истечет время отправки / возврата, я не смогу сделать больше запросов, так что мне нужно более одного сокета для каждого клиента? Больше чем одна нить?
Я читал о безопасности потоков, и учитывая, что send и recv блокируют вызовы, я предполагаю, что мое приложение будет потокобезопасным, если у меня только один поток на клиента для сетевых коммуникаций, однако если мне нужно больше, чем один поток или более одного сокета для каждого клиента (что я пока не знаю), как мне сделать его потокобезопасным?
Извините, это было так долго.
Спасибо.