Чтобы получить такую низкую производительность, вы делаете что-то очень неэффективное. Возможно, операции ввода-вывода являются однобайтовыми?
Переход на необработанные сокеты - плохая идея. Чтобы получить надежную связь, вам потребуется добавить некоторую проверку данных, последовательность и т. Д. И т. Д. - все, что делает TCP для надежности.
Если целью является передача данных от одного процесса другому на одной машине, используйте общую память и мьютекс для синхронизации доступа. Конечно, это не очень хорошее решение, если программы в конечном итоге должны будут работать на разных машинах.