2014-10-03 2 views
1

ocaml에서 메시지를 보내는 코드를 작성했습니다.[close_out out_channel]을 (를) 왜 제거해야하나요?

let out_channel = Unix.out_channel_of_descr sockfd in 
Marshal.to_channel out_channel message []; 
flush out_channel; 
close_out out_channel 

그러나 경고를 받았습니다.

GLib-WARNING **: poll(2) failed due to: Bad file descriptor. 

나는 경고가 [close_out out_channel]에 의한 알고 있었다, 나는 코드에서 [out_channel close_out] 제거 할 때 경고를하지 않았다. 왜 내가 [close_out out_channel]을 제거해야하는지 모르겠다. 이유를 말해 줄 수 있니?

답변

1

OCaml 채널을 sockfd에서 만들고 있습니다. 채널을 닫으면 sockfd를 닫습니다. 이렇게하면 sockfd를 만든 레이어를 혼동하게됩니다. 그 후에 일이 잘못됩니다. sockfd를 담당하는 사람은 누구나 그것을 폐쇄 할 책임이 있습니다. 실제로는 close_out out_channel을 남겨 두는 것이 옳은 일이라고 생각합니다. 그러나 flush out_channel이 좋습니다.

+0

그럼, 잘못된 코드로 out_channel을 닫을 때 socked를 종료한다는 의미입니까? – mmsss

+0

네, 제가 그렇게 명확하지 않다고 생각합니다. 나는 약간을 다시 쓸 것이다. –

+0

감사합니다. 나는 너의 대답을 기다리고있을 것이다. – mmsss