diff options
author | simonm <unknown> | 1998-12-02 13:32:30 +0000 |
---|---|---|
committer | simonm <unknown> | 1998-12-02 13:32:30 +0000 |
commit | 438596897ebbe25a07e1c82085cfbc5bdb00f09e (patch) | |
tree | da7a441396aed2e13f6e0cc55282bf041b0cf72c /ghc/lib/misc/cbits/acceptSocket.c | |
parent | 967cc47f37cb93a5e2b6df7822c9a646f0428247 (diff) | |
download | haskell-438596897ebbe25a07e1c82085cfbc5bdb00f09e.tar.gz |
[project @ 1998-12-02 13:17:09 by simonm]
Move 4.01 onto the main trunk.
Diffstat (limited to 'ghc/lib/misc/cbits/acceptSocket.c')
-rw-r--r-- | ghc/lib/misc/cbits/acceptSocket.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/ghc/lib/misc/cbits/acceptSocket.c b/ghc/lib/misc/cbits/acceptSocket.c index 1ded2d6917..efd13b9e33 100644 --- a/ghc/lib/misc/cbits/acceptSocket.c +++ b/ghc/lib/misc/cbits/acceptSocket.c @@ -8,8 +8,9 @@ #endif #define NON_POSIX_SOURCE -#include "rtsdefs.h" +#include "Rts.h" #include "ghcSockets.h" +#include "stgio.h" StgInt acceptSocket(I_ sockfd, A_ peer, A_ addrlen) @@ -19,7 +20,31 @@ acceptSocket(I_ sockfd, A_ peer, A_ addrlen) while ((fd = accept((int)sockfd, (struct sockaddr *)peer, (int *)addrlen)) < 0) { if (errno != EINTR) { cvtErrno(); - stdErrno(); + switch (ghc_errno) { + default: + stdErrno(); + break; + case GHC_EBADF: + ghc_errtype = ERR_INVALIDARGUMENT; + ghc_errstr = "Not a valid descriptor"; + break; + case GHC_EFAULT: + ghc_errtype = ERR_INVALIDARGUMENT; + ghc_errstr = "Address not in writeable part of user address space"; + break; + case GHC_ENOTSOCK: + ghc_errtype = ERR_INVALIDARGUMENT; + ghc_errstr = "Descriptor not a socket"; + break; + case GHC_EOPNOTSUPP: + ghc_errtype = ERR_INVALIDARGUMENT; + ghc_errstr = "Socket not of type that supports listen"; + break; + case GHC_EWOULDBLOCK: + ghc_errtype = ERR_OTHERERROR; + ghc_errstr = "No sockets are present to be accepted"; + break; + } return -1; } } |