problems with ghc-5.02 Socket module (SunOS)
Volker Stolz
stolz@hyperion.informatik.rwth-aachen.de
Mon, 15 Oct 2001 16:07:00 +0200
In local.glasgow-haskell-users, you wrote:
> Fail: invalid argument
> Action: getSocketOption
> Reason: Invalid argument
>
> even though there IS a listener on the socket
> (other programs can connect to it).
>
> I have ghc-5.02 (binary package for SunOS)
> Any hints appreciated. how to find out what is invalid?
'truss' says:
...
connect(3, 0x500BB040, 16, 1) Err#150 EINPROGRESS
poll(0xFFBEF500, 1, 134218) = 1
getsockopt(3, 65535, 4103, 0x500BB058, 0x500BB064, 1) Err#22 EINVAL
Which is highly suspicious: getsockopt should never return EINVAL,
so something is seriously wrong. The interface is
int getsockopt(int s, int level, int optname, void *optval,
socklen_t *optlen);
Notice the last parameter. Passing just "1" can't be right. The
manpage mentions that
For getsockopt(), optlen is a value-result
parameter, initially containing the size of the buffer
pointed to by optval, and modified on return to indicate the
actual size of the value returned. Use a 0 optval if no
option value is to be supplied or returned.
IMO it should be a pointer to a CInt containing "1".
I'm currently getting ready a source-version of ghc to test this,
but Slowlaris takes ages to build. I'd assume instead of 'alloca'
it should be 'withObject'.
Whatever. Maybe Simon M. finds a solution faster than me?
--
Volker Stolz * stolz@i2.informatik.rwth-aachen.de * PGP + S/MIME