2

注:私はWindowsで実行しています(ただし、このような問題へのアプローチでは、できるだけクロスプラットフォームになりたいと思っています)

ブロックしないことがいかに良いことかは理解していますが、私の特定のケースではブロックしたいのですが、ブロックさせるためのトリックはありますか、それとも私がここでやっていることへのより良いアプローチがあります:

hPutStrLn hdl "bye\n"
hClose hdl

問題は、hClose完全な「bye\n」が回線を介して送信される前に get が呼び出され、ネットワークの反対側では単に「b」または「by」が取得されhClose、接続が切断されることです。

hCloseでは、回線を切断する前に完全な「bye\n」を確実に送信するにはどうすればよいでしょうか?

ちょっとだけ睡眠をとって、解決策の不完全さを受け入れるだけですか?

4

1 に答える 1

0

答えは@DanielFischerからの上記のコメントにあります.答えを書く気がしなかったので不思議に思う次の人のためにここに投稿してください.

hFlush hdl が必要です。

出力関数の Ln バージョンが自動的にフラッシュすると推測していました。ほとんどのコンソールはライン バッファリングされており、その場合はこれが当てはまりますが、すべてではありません。また、hClose は閉じる前にフラッシュを実行しないことに注意してください。

于 2013-03-18T05:30:01.673 に答える