Я разрабатываю и тестирую клиент-серверную программу на основе TCP-сокетов (интернет-домен). В настоящее время я тестирую его на локальном компьютере и не могу понять следующее о SIGPIPE.
*. SIGPIPE появляется довольно случайно. Это может быть детерминированным?
Первые тесты включали одну маленькую (25 символов) операцию отправки с клиента и соответствующий прием на сервере. Тот же код на той же машине работает успешно или нет (SIGPIPE) полностью вне моего контроля. Частота отказов составляет около 45% случаев (довольно высокий). Итак, могу ли я настроить машину любым способом, чтобы минимизировать это.
**. Второй этап тестирования заключался в отправке 40000 небольших (25 символов) сообщений от клиента на сервер (1 МБ общих данных), а затем сервер отвечал общим объемом фактически полученных данных. Клиент отправляет данные в узком цикле, и на сервере происходит ОДИН приемный вызов. Он работает только для максимум 1200 байтов от общего количества отправленных данных, и опять же, есть эти недетерминированные SIGPIPE, примерно в 70% раз (очень плохо).
Может кто-нибудь предложить какое-то улучшение моего дизайна (возможно, это будет на сервере). Требование заключается в том, что клиент должен иметь возможность отправлять от среднего до очень большого количества данных (опять же около 25 символов в каждом сообщении) после того, как соединение с одним сокетом было установлено на сервер.
У меня такое ощущение, что множественные посылки против одного приема всегда будут с потерями и очень неэффективными. Должны ли мы объединять сообщения и отправлять только одну операцию send (). Это единственный путь?