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], и я не получаю предупреждение при удалении [close_out out_channel] из кода. Я не знаю, почему я должен удалить [close_out out_channel]. Не могли бы вы объяснить почему?

ответ

1

Вы создаете канал OCaml из sockfd. Когда вы закрываете канал, вы закрываете sockfd. Это смутит любой слой, созданный sockfd. После этого все идет не так. Тот, кто отвечает за sockfd, также отвечает за его закрытие. Просто оставляя close_out out_channel, на самом деле это правильно, я думаю. Но flush out_channel это хорошо.

+0

Итак, вы имеете в виду, что я закрываю носок при закрытии out_channel в неправильном коде? – mmsss

+0

Да, хотя я думаю, что я не был таким ясным. Я переписал немного. –

+0

Спасибо. Я буду ждать вашего ответа. – mmsss

Смежные вопросы