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