2015-08-13 71 views
0

致電時頭兒原的writeMessageToFd(pipe, message);我得到這個錯誤:頭兒原終止拋出的一個實例後,所謂的「KJ :: ExceptionImpl」

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 

回答

1

你不是真的問了一個問題,但我可以通過該異常告訴你,你不應該嘗試用無效的文件描述符調用writeMessageToFd(異常文本告訴你這個「Bad file descriptor; fd = -1」)。

你有兩種選擇: - 不調用該函數,如果管== -1(可能是最好的,你應該已經檢查了這回管調用沒有返回-1) - 圍繞着您的來電用try/catch寫writeMessageToFd(),並適當地處理異常

你應該真的和前者一起,並在管道中適當地處理-1值。

+0

是的,這是一個無效的fd。 – BAR

+0

只需要注意,當流發生任何錯誤時也會發生這種情況。 Cap'n Proto似乎是一個可靠的序列化程序,因此請先檢查您的代碼。 – BAR

相關問題