Cap’n Proto завершается вызовом после создания экземпляра ‘kj :: ExceptionImpl’

При звонке Cap’n Proto’s writeMessageToFd(pipe, message); Я получаю эту ошибку:

terminate called after throwing an instance of 'kj::ExceptionImpl'
what():  src/kj/io.c++:323: failed: ::writev(fd, current, iov.end() - current): Bad file descriptor; fd = -1
stack: 0x7efead69cf89 0x7efead6a0c7f 0x7efead6a2648 0x7efead6a24f7 0x7efead8f40b7 0x7efead8f42a4 0x402c7b 0x402a36 0x4028df 0x7efeabd50e50 0x7efeabd5181a 0x7efeabd52669 0x7efeabd52a03 0x7efeabd52bb2 0x402865 0x4027ab

0

Решение

Вы на самом деле не задавали вопрос, но я могу сказать вам из этого исключения, что вам не следовало пытаться вызвать writeMessageToFd с недопустимым дескриптором файла (текст исключения говорит вам об этом «Bad file descriptor; fd = -1») ,

У вас есть два варианта:
— не вызывайте эту функцию, если pipe == -1 (вероятно, лучше всего, вы действительно должны были проверить, что вызов, вернувший pipe, не вернул -1)
— окружить ваш вызов writeMessageToFd () try / catch и обработать исключение соответствующим образом

Вы должны действительно пойти с первым и соответственно обработать значение -1 в трубе.

1

Другие решения