% % (c) The GRASP/AQUA Project, Glasgow University, 1996 % \subsection[listenSocket.lc]{Indicate willingness to receive connections} \begin{code} #include "rtsdefs.h" #include "stgio.h" #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif StgInt listenSocket(int sockfd, int backlog) { int rc; while ((rc = listen(sockfd, backlog)) < 0) { 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_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; } return -1; } } return 0; } \end{code}