-const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.144 2017/06/08 13:04:34 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $
#define AI_NUMERICSERV 0
#endif
-const char jbsockets_h_rcs[] = JBSOCKETS_H_VERSION;
-
/*
* Maximum number of gethostbyname(_r) retries in case of
* soft errors (TRY_AGAIN).
*/
#define MAX_DNS_RETRIES 10
-#define MAX_LISTEN_BACKLOG 128
-
#ifdef HAVE_RFC2553
static jb_socket rfc2553_connect_to(const char *host, int portnum, struct client_state *csp);
#else
*
* Function : set_no_delay_flag
*
- * Description : Disables TCP coalescence for the given socket.
+ * Description : Disables the Nagle algorithm (TCP send coalescence)
+ * for the given socket.
*
* Parameters :
* 1 : fd = The file descriptor to operate on
fd_set wfds;
struct timeval timeout;
#endif
-#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
+#if !defined(_WIN32) && !defined(__BEOS__) && !defined(__OS2__)
int flags;
#endif
int connect_failed;
set_no_delay_flag(fd);
-#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
+#if !defined(_WIN32) && !defined(__BEOS__) && !defined(__OS2__)
if ((flags = fcntl(fd, F_GETFL, 0)) != -1)
{
flags |= O_NDELAY;
fcntl(fd, F_SETFL, flags);
}
-#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__) */
+#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(__OS2__) */
connect_failed = 0;
while (connect(fd, rp->ai_addr, rp->ai_addrlen) == JB_INVALID_SOCKET)
continue;
}
-#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
+#if !defined(_WIN32) && !defined(__BEOS__) && !defined(__OS2__)
if (flags != -1)
{
flags &= ~O_NDELAY;
fcntl(fd, F_SETFL, flags);
}
-#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__) */
+#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(__OS2__) */
#ifdef HAVE_POLL
poll_fd[0].fd = fd;
fd_set wfds;
struct timeval tv[1];
#endif
-#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
+#if !defined(_WIN32) && !defined(__BEOS__) && !defined(__OS2__)
int flags;
#endif
set_no_delay_flag(fd);
-#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
+#if !defined(_WIN32) && !defined(__BEOS__) && !defined(__OS2__)
if ((flags = fcntl(fd, F_GETFL, 0)) != -1)
{
flags |= O_NDELAY;
mark_socket_for_close_on_execute(fd);
#endif
}
-#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__) */
+#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(__OS2__) */
while (connect(fd, (struct sockaddr *) & inaddr, sizeof inaddr) == JB_INVALID_SOCKET)
{
}
}
-#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
+#if !defined(_WIN32) && !defined(__BEOS__) && !defined(__OS2__)
if (flags != -1)
{
flags &= ~O_NDELAY;
fcntl(fd, F_SETFL, flags);
}
-#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__) */
+#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(__OS2__) */
#ifdef HAVE_POLL
poll_fd[0].fd = fd;
* nonzero on error.
*
*********************************************************************/
-#ifdef AMIGA
-int write_socket(jb_socket fd, const char *buf, ssize_t len)
-#else
int write_socket(jb_socket fd, const char *buf, size_t len)
-#endif
{
if (len == 0)
{
#if defined(_WIN32)
return (send(fd, buf, (int)len, 0) != (int)len);
-#elif defined(__BEOS__) || defined(AMIGA)
+#elif defined(__BEOS__)
return (send(fd, buf, len, 0) != len);
#elif defined(__OS2__)
/*
#if defined(_WIN32)
ret = recv(fd, buf, len, 0);
-#elif defined(__BEOS__) || defined(AMIGA) || defined(__OS2__)
+#elif defined(__BEOS__) || defined(__OS2__)
ret = recv(fd, buf, (size_t)len, 0);
#else
ret = (int)read(fd, buf, (size_t)len);
{
#if defined(_WIN32) || defined(__BEOS__)
closesocket(fd);
-#elif defined(AMIGA)
- CloseSocket(fd);
#elif defined(__OS2__)
soclose(fd);
#else
* Parameters :
* 1 : hostnam = TCP/IP address to bind/listen to
* 2 : portnum = port to listen on
- * 3 : pfd = pointer used to return file descriptor.
+ * 3 : backlog = Listen backlog
+ * 4 : pfd = pointer used to return file descriptor.
*
* Returns : if success, returns 0 and sets *pfd.
* if failure, returns -3 if address is in use,
* -2 if address unresolvable,
* -1 otherwise
*********************************************************************/
-int bind_port(const char *hostnam, int portnum, jb_socket *pfd)
+int bind_port(const char *hostnam, int portnum, int backlog, jb_socket *pfd)
{
#ifdef HAVE_RFC2553
struct addrinfo hints;
}
#endif /* ndef HAVE_RFC2553 */
- while (listen(fd, MAX_LISTEN_BACKLOG) == -1)
+ while (listen(fd, backlog) == -1)
{
if (errno != EINTR)
{
struct sockaddr_in server;
struct hostent *host = NULL;
#endif /* HAVE_RFC2553 */
-#if defined(_WIN32) || defined(__OS2__) || defined(AMIGA)
+#if defined(_WIN32) || defined(__OS2__)
/* according to accept_connection() this fixes a warning. */
int s_length, s_length_provided;
#else
struct sockaddr_in client;
#endif
jb_socket afd;
-#if defined(_WIN32) || defined(__OS2__) || defined(AMIGA)
+#if defined(_WIN32) || defined(__OS2__)
/* Wierdness - fix a warning. */
int c_length;
#else
#else
do
{
-#if defined(FEATURE_ACCEPT_FILTER) && defined(SO_ACCEPTFILTER)
- struct accept_filter_arg af_options;
- bzero(&af_options, sizeof(af_options));
- strlcpy(af_options.af_name, "httpready", sizeof(af_options.af_name));
- setsockopt(fd, SOL_SOCKET, SO_ACCEPTFILTER, &af_options, sizeof(af_options));
-#endif
afd = accept (fd, (struct sockaddr *) &client, &c_length);
} while (afd < 0 && errno == EINTR);
if (afd < 0)