Sockets again

George Russell ger@tzi.de
Tue, 29 Apr 2003 19:14:19 +0200


This is a multi-part message in MIME format.
--------------050304020809040503040700
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Simon Marlow wrote (snipped)
> Hmm.  I rather think that hGetChar should always return a character
> immediately if there is one available, regardless of the buffering mode.
> Looking at the source, it appears that hGetLine behaves like this, as
> does lazy reading with hGetContents.  I can't see any reason for waiting
> for the buffer to be completely full before returning anything.
> 
> If you have a source tree handy, try the enclosed patch.  If not, make a
> copy of hGetChar from the sources in libraries/base/GHC/IO.hs, apply the
> patch, and compile it separately (you'll need to import GHC.Handle
> explicitly, amongst other things).
OK, applying the patch and dropping the patched hGetChar in (as per the attached
file) seems to fix the problem.   Is there any way of getting the same effect
without setting NoBuffering/waiting for the next ghc release/changing every
call by client and server to hGetChar in the program?  If not I think I'll
keep NoBuffering and wait for the next ghc release ..

Thanks,

George

--------------050304020809040503040700
Content-Type: text/plain;
 name="VServer.hs"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="VServer.hs"

LS0gVGVzdCBwcm9ncmFtIGZvciBzZXJ2ZXIgdXNpbmcgR0hDIFNvY2tldCBsaWJyYXJ5Lgpt
b2R1bGUgTWFpbihtYWluKSB3aGVyZQoKaW1wb3J0IEdIQy5FbnVtCmltcG9ydCBHSEMuQmFz
ZQppbXBvcnQgR0hDLklPQmFzZQppbXBvcnQgR0hDLkhhbmRsZQktLSBtdWNoIG9mIHRoZSBy
ZWFsIHN0dWZmIGlzIGluIGhlcmUKaW1wb3J0IEdIQy5SZWFsCmltcG9ydCBHSEMuTnVtCmlt
cG9ydCBHSEMuU2hvdwppbXBvcnQgR0hDLkxpc3QKaW1wb3J0IEdIQy5FeGNlcHRpb24gICAg
KCBpb0Vycm9yLCBjYXRjaCApCmltcG9ydCBHSEMuQ29uYwoKaW1wb3J0IElPCmltcG9ydCBO
ZXR3b3JrCgptYWluID0KICAgZG8KICAgICAgc29ja2V0IDwtIGxpc3Rlbk9uIChQb3J0TnVt
YmVyIDE1MTUxKQogICAgICAoaGFuZGxlLGhvc3ROYW1lLF8pIDwtIGFjY2VwdCBzb2NrZXQK
ICAgICAgaFNldEJ1ZmZlcmluZyBoYW5kbGUgKEJsb2NrQnVmZmVyaW5nIChKdXN0IDQwOTYp
KQogICAgICBwdXRTdHIgKCJBY2NlcHRlZDogIisraG9zdE5hbWUrKyJcbiIpCiAgICAgIGMg
PC0gbmV3X2hHZXRDaGFyIGhhbmRsZQogICAgICBwdXRTdHJMbiAoc2hvdyBjKQoKbmV3X2hH
ZXRDaGFyIDo6IEhhbmRsZSAtPiBJTyBDaGFyCm5ld19oR2V0Q2hhciBoYW5kbGUgPQogIHdh
bnRSZWFkYWJsZUhhbmRsZSAiaEdldENoYXIiIGhhbmRsZSAkIFxoYW5kbGVfIC0+IGRvCgog
IGxldCBmZCA9IGhhRkQgaGFuZGxlXwogICAgICByZWYgPSBoYUJ1ZmZlciBoYW5kbGVfCgog
IGJ1ZiA8LSByZWFkSU9SZWYgcmVmCiAgaWYgbm90IChidWZmZXJFbXB0eSBidWYpCgl0aGVu
IGhHZXRjQnVmZmVyZWQgZmQgcmVmIGJ1ZgoJZWxzZSBkbwoKICAtLSBidWZmZXIgaXMgZW1w
dHkuCiAgY2FzZSBoYUJ1ZmZlck1vZGUgaGFuZGxlXyBvZgogICAgTGluZUJ1ZmZlcmluZyAg
ICAtPiBkbwoJbmV3X2J1ZiA8LSBmaWxsUmVhZEJ1ZmZlciBmZCBUcnVlIChoYUlzU3RyZWFt
IGhhbmRsZV8pIGJ1ZgoJaEdldGNCdWZmZXJlZCBmZCByZWYgbmV3X2J1ZgogICAgQmxvY2tC
dWZmZXJpbmcgXyAtPiBkbwoJbmV3X2J1ZiA8LSBmaWxsUmVhZEJ1ZmZlciBmZCBUcnVlICho
YUlzU3RyZWFtIGhhbmRsZV8pIGJ1ZgoJaEdldGNCdWZmZXJlZCBmZCByZWYgbmV3X2J1Zgog
ICAgTm9CdWZmZXJpbmcgLT4gZXJyb3IgIlRoaXMgY2FuJ3QgaGFwcGVuIgoKICAgIHstCiAg
ICAgZG8KCS0tIG1ha2UgdXNlIG9mIHRoZSBtaW5pbWFsIGJ1ZmZlciB3ZSBhbHJlYWR5IGhh
dmUKCWxldCByYXcgPSBidWZCdWYgYnVmCglyIDwtIHJlYWRSYXdCdWZmZXIgImhHZXRDaGFy
IiAoZnJvbUludGVncmFsIGZkKSAoaGFJc1N0cmVhbSBoYW5kbGVfKSByYXcgMCAxCglpZiBy
ID09IDAKCSAgIHRoZW4gaW9lX0VPRgoJICAgZWxzZSBkbyAoYyxfKSA8LSByZWFkQ2hhckZy
b21CdWZmZXIgcmF3IDAKCQkgICByZXR1cm4gYwogICAgIC19CgpoR2V0Y0J1ZmZlcmVkIGZk
IHJlZiBidWZAQnVmZmVyeyBidWZCdWY9YiwgYnVmUlB0cj1yLCBidWZXUHRyPXcgfQogPSBk
byAoYyxyKSA8LSByZWFkQ2hhckZyb21CdWZmZXIgYiByCiAgICAgIGxldCBuZXdfYnVmIHwg
ciA9PSB3ICAgID0gYnVmeyBidWZSUHRyPTAsIGJ1ZldQdHI9MCB9CgkgICAgICAgICAgfCBv
dGhlcndpc2UgPSBidWZ7IGJ1ZlJQdHI9ciB9CiAgICAgIHdyaXRlSU9SZWYgcmVmIG5ld19i
dWYKICAgICAgcmV0dXJuIGMKCg==
--------------050304020809040503040700--