Compile with android NDK
This also fixes the bug that nghttpx's acceptor fd is blocking if SOCK_NONBLOCK is undefined.
This commit is contained in:
parent
a86d78216c
commit
f7455d48cc
|
@ -41,5 +41,6 @@ PATH=$TOOLCHAIN/bin:$PATH
|
||||||
--disable-examples \
|
--disable-examples \
|
||||||
--disable-threads \
|
--disable-threads \
|
||||||
CPPFLAGS="-I$PREFIX/include" \
|
CPPFLAGS="-I$PREFIX/include" \
|
||||||
|
CXXFLAGS="-fno-strict-aliasing" \
|
||||||
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
||||||
LDFLAGS="-L$PREFIX/lib"
|
LDFLAGS="-L$PREFIX/lib"
|
||||||
|
|
|
@ -278,7 +278,8 @@ AM_CONDITIONAL([HAVE_CUNIT], [ test "x${have_cunit}" = "xyes" ])
|
||||||
# libev (for src)
|
# libev (for src)
|
||||||
# libev does not have pkg-config file. Check it in an old way.
|
# libev does not have pkg-config file. Check it in an old way.
|
||||||
LIBS_OLD=$LIBS
|
LIBS_OLD=$LIBS
|
||||||
AC_CHECK_LIB([ev], [ev_time], [have_libev=yes], [have_libev=no])
|
# android requires -lm for floor
|
||||||
|
AC_CHECK_LIB([ev], [ev_time], [have_libev=yes], [have_libev=no], [-lm])
|
||||||
if test "x${have_libev}" = "xyes"; then
|
if test "x${have_libev}" = "xyes"; then
|
||||||
AC_CHECK_HEADER([ev.h], [have_libev=yes], [have_libev=no])
|
AC_CHECK_HEADER([ev.h], [have_libev=yes], [have_libev=no])
|
||||||
if test "x${have_libev}" = "xyes"; then
|
if test "x${have_libev}" = "xyes"; then
|
||||||
|
|
|
@ -188,11 +188,19 @@ std::unique_ptr<AcceptHandler> create_acceptor(ConnectionHandler *handler,
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
for (rp = res; rp; rp = rp->ai_next) {
|
for (rp = res; rp; rp = rp->ai_next) {
|
||||||
|
#ifdef SOCK_NONBLOCK
|
||||||
fd =
|
fd =
|
||||||
socket(rp->ai_family, rp->ai_socktype | SOCK_NONBLOCK, rp->ai_protocol);
|
socket(rp->ai_family, rp->ai_socktype | SOCK_NONBLOCK, rp->ai_protocol);
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
#else // !SOCK_NONBLOCK
|
||||||
|
fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
|
||||||
|
if (fd == -1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
util::make_socket_nonblocking(fd);
|
||||||
|
#endif // !SOCK_NONBLOCK
|
||||||
int val = 1;
|
int val = 1;
|
||||||
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val,
|
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val,
|
||||||
static_cast<socklen_t>(sizeof(val))) == -1) {
|
static_cast<socklen_t>(sizeof(val))) == -1) {
|
||||||
|
|
|
@ -36,14 +36,6 @@
|
||||||
|
|
||||||
#include "shrpx_log.h"
|
#include "shrpx_log.h"
|
||||||
|
|
||||||
#ifndef SOCK_NONBLOCK
|
|
||||||
#define SOCK_NONBLOCK 0
|
|
||||||
#endif // !SOCK_NONBLOCK
|
|
||||||
|
|
||||||
#ifndef SOCK_CLOEXEC
|
|
||||||
#define SOCK_CLOEXEC 0
|
|
||||||
#endif // !SOCK_CLOEXEC
|
|
||||||
|
|
||||||
#ifndef HAVE__EXIT
|
#ifndef HAVE__EXIT
|
||||||
#define _Exit(status) _exit(status)
|
#define _Exit(status) _exit(status)
|
||||||
#endif // !HAVE__EXIT
|
#endif // !HAVE__EXIT
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <cerrno>
|
||||||
|
|
||||||
#include "shrpx_connection_handler.h"
|
#include "shrpx_connection_handler.h"
|
||||||
#include "shrpx_config.h"
|
#include "shrpx_config.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
|
@ -61,11 +61,13 @@ Worker::Worker(SSL_CTX *sv_ssl_ctx, SSL_CTX *cl_ssl_ctx,
|
||||||
http1_connect_blocker_ = util::make_unique<ConnectBlocker>(loop_);
|
http1_connect_blocker_ = util::make_unique<ConnectBlocker>(loop_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NOTHREADS
|
||||||
fut_ = std::async(std::launch::async, [this, &ticket_keys] {
|
fut_ = std::async(std::launch::async, [this, &ticket_keys] {
|
||||||
worker_config->ticket_keys = ticket_keys;
|
worker_config->ticket_keys = ticket_keys;
|
||||||
(void)reopen_log_files();
|
(void)reopen_log_files();
|
||||||
ev_run(loop_);
|
ev_run(loop_);
|
||||||
});
|
});
|
||||||
|
#endif // !NOTHREADS
|
||||||
}
|
}
|
||||||
|
|
||||||
Worker::~Worker() { ev_async_stop(loop_, &w_); }
|
Worker::~Worker() { ev_async_stop(loop_, &w_); }
|
||||||
|
|
12
src/util.cc
12
src/util.cc
|
@ -34,6 +34,7 @@
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#include <cerrno>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
@ -860,11 +861,22 @@ int make_socket_nodelay(int fd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int create_nonblock_socket(int family) {
|
int create_nonblock_socket(int family) {
|
||||||
|
#ifdef SOCK_NONBLOCK
|
||||||
auto fd = socket(family, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
|
auto fd = socket(family, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
|
||||||
|
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#else // !SOCK_NONBLOCK
|
||||||
|
auto fd = socket(family, SOCK_STREAM, 0);
|
||||||
|
|
||||||
|
if (fd == -1) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
make_socket_nonblocking(fd);
|
||||||
|
make_socket_closeonexec(fd);
|
||||||
|
#endif // !SOCK_NONBLOCK
|
||||||
|
|
||||||
make_socket_nodelay(fd);
|
make_socket_nodelay(fd);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue