summaryrefslogtreecommitdiff
path: root/ghc/lib/misc/cbits/acceptSocket.c
diff options
context:
space:
mode:
Diffstat (limited to 'ghc/lib/misc/cbits/acceptSocket.c')
-rw-r--r--ghc/lib/misc/cbits/acceptSocket.c64
1 files changed, 0 insertions, 64 deletions
diff --git a/ghc/lib/misc/cbits/acceptSocket.c b/ghc/lib/misc/cbits/acceptSocket.c
deleted file mode 100644
index 9fb0e563c5..0000000000
--- a/ghc/lib/misc/cbits/acceptSocket.c
+++ /dev/null
@@ -1,64 +0,0 @@
-#if 0
-%
-% (c) The GRASP/AQUA Project, Glasgow University, 1996
-%
-\subsection[acceptSocket.lc]{Server wait for client to connect}
-
-\begin{code}
-#endif
-
-#define NON_POSIX_SOURCE
-#include "Rts.h"
-#include "ghcSockets.h"
-#include "stgio.h"
-
-StgInt
-acceptSocket(I_ sockfd, A_ peer, A_ addrlen)
-{
- StgInt fd;
- long flags;
-
- while ((fd = accept((int)sockfd, (struct sockaddr *)peer, (int *)addrlen)) < 0) {
- if (errno == EAGAIN) {
- errno = 0;
- return FILEOBJ_BLOCKED_READ;
-
- } else if (errno != EINTR) {
- cvtErrno();
- 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;
- }
- }
-
- /* set the non-blocking flag on this file descriptor */
-#if !defined(_WIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__)
- flags = fcntl(fd, F_GETFL);
- fcntl(fd, F_SETFL, flags | O_NONBLOCK);
-#endif
-
- return fd;
-}