в случае TCP (AF_INET, SOCK_STREAM) нормально иметь поток чтения (recv) и поток записи (send), которые не синхронизированы.
Но из вашего описания неясно, для чего используется мьютекс в вашем коде - похоже, что "предыдущие разработчики" синхронизировали сетевые операции не из-за сокетов, а из-за требований протокола вашего приложения.
Многие приложения осуществляют связь таким образом:
lock
-> send request
<- recv reply
unlock
lock
-> send request
<- recv reply
unlock
здесь требуется блокировка (если задействованы несколько потоков) для синхронизации пар send / recv, в противном случае ваш протокол приложения может превратиться в беспорядок несогласованных запросов и ответов.