строка 81
msg[MSG_SIZE] = '\0';`
переполняет ваш буфер. Сделай это
msg[MSG_SIZE - 1] = '\0';`
Вам также нужно , чтобы проверить возвращаемое значение всех вызовов, которые могут потерпеть неудачу, это строки 39,42,45,68 и 80
Редактировать: И если вы проверили ошибки, скорее всего, вы видели сбой вызова accept (), вероятно, из-за того, что сокет не находится в режиме прослушивания - то есть вы пропускаете вызов listen()