#include "cryptobox.h"
#include "unix-std.h"
#include <math.h>
+#include <netinet/tcp.h>
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
struct rspamd_http_connection *conn;
gchar urlbuf[PATH_MAX];
struct client_cbdata *cb;
- gint fd;
+ gint fd, flags;
g_assert (
(fd = rspamd_inet_address_connect (addr, SOCK_STREAM, TRUE)) != -1);
+ flags = 1;
+ setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, &flags, sizeof (flags));
conn = rspamd_http_connection_new (rspamd_client_body, rspamd_client_err,
rspamd_client_finish, RSPAMD_HTTP_CLIENT_SIMPLE,
RSPAMD_HTTP_CLIENT, c);
rspamd_inet_addr_t *addr;
gint nfd;
- if ((nfd =
- rspamd_accept_from_socket (fd, &addr)) == -1) {
- rspamd_fprintf (stderr, "accept failed: %s", strerror (errno));
- return;
- }
- /* Check for EAGAIN */
- if (nfd == 0) {
- return;
- }
+ do {
+ if ((nfd =
+ rspamd_accept_from_socket (fd, &addr)) == -1) {
+ rspamd_fprintf (stderr, "accept failed: %s", strerror (errno));
+ return;
+ }
+ /* Check for EAGAIN */
+ if (nfd == 0) {
+ return;
+ }
- rspamd_inet_address_destroy (addr);
- session = g_slice_alloc (sizeof (*session));
- session->conn = rspamd_http_connection_new (NULL, rspamd_server_error,
- rspamd_server_finish, 0, RSPAMD_HTTP_SERVER, c);
- rspamd_http_connection_set_key (session->conn, server_key);
- rspamd_http_connection_read_message (session->conn, session, nfd, &io_tv,
- ev_base);
- session->reply = FALSE;
- session->fd = nfd;
- session->ev_base = ev_base;
+ rspamd_inet_address_destroy (addr);
+ session = g_slice_alloc (sizeof (*session));
+ session->conn = rspamd_http_connection_new (NULL, rspamd_server_error,
+ rspamd_server_finish, 0, RSPAMD_HTTP_SERVER, c);
+ rspamd_http_connection_set_key (session->conn, server_key);
+ rspamd_http_connection_read_message (session->conn,
+ session,
+ nfd,
+ &io_tv,
+ ev_base);
+ session->reply = FALSE;
+ session->fd = nfd;
+ session->ev_base = ev_base;
+ } while (nfd > 0);
}
static void