Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 3 additions & 17 deletions config.mk
Original file line number Diff line number Diff line change
@@ -1,37 +1,23 @@

PREFIX=/usr/local
INSTALL_INCDIR=$(PREFIX)/include/hv
INSTALL_LIBDIR=$(PREFIX)/lib

BUILD_SHARED=yes
BUILD_STATIC=yes

# modules
# include icmp dns ftp smtp
WITH_PROTOCOL=no

WITH_EVPP=yes
WITH_HTTP=yes
WITH_HTTP_SERVER=yes
WITH_HTTP_CLIENT=yes
WITH_MQTT=no

# features
# base/hsocket.h: Unix Domain Socket
ENABLE_UDS=no
# base/RAII.cpp: Windows MiniDumpWriteDump
ENABLE_WINDUMP=no
# http/http_content.h: KeyValue,QueryParams,MultiPart
USE_MULTIMAP=no

# dependencies
# for http/client
WITH_CURL=no
# for http2
WITH_NGHTTP2=no
# for SSL/TLS
WITH_OPENSSL=no
WITH_GNUTLS=no
WITH_MBEDTLS=no

# rudp
WITH_KCP=no
WITH_IO_URING=no
CONFIG_DATE=20260710
6 changes: 3 additions & 3 deletions docs/cn/HttpServer.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ class HttpServer {

// 设置监听主机
void setHost(const char* host = "0.0.0.0");
// 设置监听端口
void setPort(int port = 0, int ssl_port = 0);
// 设置监听端口,port=0 表示自动分配空闲端口
void setPort(int port = 0, int ssl_port = -1);
// 设置监听文件描述符
void setListenFD(int fd = -1, int ssl_fd = -1);

Expand All @@ -34,7 +34,7 @@ class HttpServer {
// 占用当前线程运行
int run(bool wait = true);

// 不占用当前线程运行
// 不占用当前线程运行,返回实际监听的HTTP端口号(port=0时为OS分配的端口)
int start();

// 停止服务
Expand Down
2 changes: 1 addition & 1 deletion examples/httpd/httpd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ int parse_confile(const char* confile) {
if (HV_WITH_SSL) {
g_http_server.https_port = ini.Get<int>("https_port");
}
if (g_http_server.port == 0 && g_http_server.https_port == 0) {
if (g_http_server.port < 0 && g_http_server.https_port < 0) {
printf("Please config listen port!\n");
exit(-10);
}
Expand Down
25 changes: 23 additions & 2 deletions http/server/HttpServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "herr.h"
#include "hlog.h"
#include "htime.h"
#include "hsocket.h"

#include "EventLoop.h"
using namespace hv;
Expand Down Expand Up @@ -178,15 +179,35 @@ static void WINAPI loop_thread_stdcall(void* userdata) {
*/
int http_server_run(http_server_t* server, int wait) {
// http_port
if (server->port > 0) {
if (server->port >= 0) {
server->listenfd[0] = Listen(server->port, server->host);
if (server->listenfd[0] < 0) return server->listenfd[0];
if (server->port == 0) {
// port=0: OS auto-assigned a free port, retrieve the actual port
sockaddr_u localaddr;
socklen_t addrlen = sizeof(localaddr);
if (getsockname(server->listenfd[0], &localaddr.sa, &addrlen) == 0) {
server->port = sockaddr_port(&localaddr);
} else {
hloge("getsockname failed: %s", strerror(errno));
}
}
hlogi("http server listening on %s:%d", server->host, server->port);
}
// https_port
if (server->https_port > 0 && HV_WITH_SSL) {
if (server->https_port >= 0 && HV_WITH_SSL) {
server->listenfd[1] = Listen(server->https_port, server->host);
if (server->listenfd[1] < 0) return server->listenfd[1];
if (server->https_port == 0) {
// https_port=0: OS auto-assigned a free port, retrieve the actual port
sockaddr_u localaddr;
socklen_t addrlen = sizeof(localaddr);
if (getsockname(server->listenfd[1], &localaddr.sa, &addrlen) == 0) {
server->https_port = sockaddr_port(&localaddr);
} else {
hloge("getsockname failed: %s", strerror(errno));
}
}
hlogi("https server listening on %s:%d", server->host, server->https_port);
}
// SSL_CTX
Expand Down
12 changes: 9 additions & 3 deletions http/server/HttpServer.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ typedef struct http_server_s {
// https_port = DEFAULT_HTTPS_PORT;
// port = 8080;
// https_port = 8443;
port = https_port = 0;
port = https_port = -1;
http_version = 1;
worker_processes = 0;
worker_threads = 0;
Expand Down Expand Up @@ -102,7 +102,7 @@ class HV_EXPORT HttpServer : public http_server_t {
if (host) strcpy(this->host, host);
}

void setPort(int port = 0, int ssl_port = 0) {
void setPort(int port = 0, int ssl_port = -1) {
if (port >= 0) this->port = port;
if (ssl_port >= 0) this->https_port = ssl_port;
}
Expand Down Expand Up @@ -149,8 +149,14 @@ class HV_EXPORT HttpServer : public http_server_t {
return http_server_run(this, wait);
}

// start(":8080")
// start("0.0.0.0:8080")
// start("[::]:8080")
// @return actual http port on success (OS-assigned when port=0), negative on error
int start(const char* ip_port = NULL) {
return run(ip_port, false);
int ret = run(ip_port, false);
if (ret != 0) return ret;
return this->port;
}

int stop() {
Expand Down