Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
bafaf9b
Add world checksum calculation for refactoring verification
kvirund Jan 19, 2026
ef6083e
Add IWorldDataSource abstraction for pluggable world loading
kvirund Jan 19, 2026
088be39
Add SQLite world data source skeleton and OLC save support
kvirund Jan 19, 2026
ec717aa
Implement full SQLite world loading
kvirund Jan 19, 2026
b48b03f
Fix SQLite loader: UTF-8 to KOI8-R conversion, type safety, top_of_mobt
kvirund Jan 20, 2026
f1d0678
Auto-detect SQLite world.db instead of requiring -S flag
kvirund Jan 20, 2026
f130e1e
Fix SQLite loader: direction parsing and GIVE_OBJ load_prob
kvirund Jan 20, 2026
f034e34
Fix SQLite loader: mob levels, triggers, and descriptions
kvirund Jan 20, 2026
a535e36
Add utf8_to_koi unit tests and fix NO-BREAK SPACE conversion
kvirund Jan 20, 2026
69aaf37
Fix SQLite object loader: add sex field and fix level
kvirund Jan 20, 2026
0e7b7ba
Fix SQLite room zone_rn calculation and add flags to checksum
kvirund Jan 20, 2026
d3f55ef
Fix SQLite object loader: add kTrap type, max_in_world NULL, affect f…
kvirund Jan 20, 2026
50bee13
Fix SQLite object loader: cap timer at 99999 like Legacy
kvirund Jan 20, 2026
b353871
Add missing object type/flag mappings and colorLOW/colorCAP in SQLite…
kvirund Jan 21, 2026
a8e4e75
Fix object loading to match Legacy loader behavior
kvirund Jan 21, 2026
e92228d
Fix SQLite trigger loader to match Legacy checksums
kvirund Jan 21, 2026
8bd8691
Normalize SQLite loader to read integer FK columns
kvirund Jan 21, 2026
695c4e2
Add world conversion tools and update .gitignore
kvirund Jan 21, 2026
0c9ca3c
Add index file support and checksum comparison tools
kvirund Jan 21, 2026
3bac1ad
Add fail-fast when HAVE_SQLITE but world.db missing
kvirund Jan 21, 2026
300cdd9
Fix encoding corruption and refactor BootWorld with IWorldDataSource
kvirund Jan 21, 2026
6ca1739
Add world loading test scripts
kvirund Jan 22, 2026
80da6a9
Fix SQLite trigger loader: use rnum instead of vnum in constructor
kvirund Jan 22, 2026
e82bf2b
Fix converter to match Legacy loader string handling
kvirund Jan 22, 2026
94535a5
Fix object flag loading and duplicate trigger support
kvirund Jan 22, 2026
ab4ec52
Improve comparison script with encoding check and buffer diffs
kvirund Jan 22, 2026
e2b4c87
Fix zone command load_prob for EQUIP_MOB and PUT_OBJ
kvirund Jan 22, 2026
dc023fe
Add padding to ROOM_FLAGS for plane 2 offset and add tests
kvirund Jan 22, 2026
9a7cb50
Add zone.group and under_construction to SQLite loader
kvirund Jan 22, 2026
3bdb1d0
Fix liquid container/fountain weight to match Legacy
kvirund Jan 22, 2026
763efbb
Add UNUSED flag handling for anti/no/affect flags
kvirund Jan 22, 2026
2fba801
Fix object checksums: UNUSED flags, timer, kCloudly, whitespace
kvirund Jan 22, 2026
eb8ffa6
Achieve 100% object checksum match SQLite vs Legacy
kvirund Jan 22, 2026
eb290a6
Fix room name whitespace preservation
kvirund Jan 22, 2026
9fc6fe9
Fix zone checksums: preserve trailing whitespace, filter UNDEF flags
kvirund Jan 22, 2026
48e01a3
Fix room checksums and improve trigger script parsing
kvirund Jan 23, 2026
1bfd178
Fix trigger checksum mismatches and zone parsing bugs
kvirund Jan 23, 2026
17ac35e
Add OpenTelemetry observability integration
kvirund Jan 26, 2026
5685a54
Add trace_id correlation between logs and traces, heartbeat tracing
kvirund Jan 28, 2026
7840e1e
Add runtime data and temporary files to .gitignore
kvirund Jan 28, 2026
cec156d
Remove temporary files and their gitignore entries
kvirund Jan 28, 2026
a58c7f0
Add RAII helper classes for OpenTelemetry instrumentation
kvirund Jan 28, 2026
da1a559
Add OpenTelemetry instrumentation to combat system
kvirund Jan 29, 2026
57ad6c3
Add OpenTelemetry instrumentation to Mobile AI system
kvirund Jan 29, 2026
9b87d08
Add OpenTelemetry instrumentation to Player save/load system
kvirund Jan 29, 2026
ed4774f
Add OpenTelemetry instrumentation to Beat Points Update + Player Stat…
kvirund Jan 29, 2026
5b4dcda
Add OpenTelemetry instrumentation to Zone Update system
kvirund Jan 29, 2026
eea6505
Add OpenTelemetry instrumentation to Magic/Spell system
kvirund Jan 29, 2026
2aeda6e
Add OpenTelemetry instrumentation to DG Script Trigger system
kvirund Jan 29, 2026
d237880
Add OpenTelemetry instrumentation to Auction system
kvirund Jan 29, 2026
c6a80f6
Add OpenTelemetry instrumentation to Crafting system
kvirund Jan 29, 2026
3249eb0
Add Grafana dashboards for OpenTelemetry observability
kvirund Jan 29, 2026
a9f46ce
Add comprehensive OpenTelemetry instrumentation documentation
kvirund Jan 29, 2026
603e947
Reorganize observability documentation and add deployment guide
kvirund Jan 29, 2026
4702d1f
Fix server crash when port is already in use
kvirund Jan 29, 2026
bc587e3
Merge origin/master (world-load-refactoring) into metrics-traces-inst…
kvirund Feb 23, 2026
b9a9d16
Fix post-merge build errors from master integration
kvirund Feb 23, 2026
319e845
Fix CharData copy semantics: replace unique_ptr with shared_ptr for O…
kvirund Feb 23, 2026
e229b29
Fix encoding: convert otel_metrics.h and otel_traces.h from UTF-8 to …
kvirund Feb 23, 2026
d5000e8
Add observability infrastructure: docker-compose + configs
kvirund Feb 23, 2026
b20d03b
Fix Windows build: rename LogLevel enum values to avoid Windows macro…
kvirund Feb 23, 2026
b878c1f
Fix Windows/MinGW builds and add OTEL CI builds
kvirund Feb 23, 2026
3613cb7
CI: add WITH_OTEL=ON to Admin API builds instead of separate OTEL jobs
kvirund Feb 23, 2026
de8cd2a
docs: document vcpkg-based OpenTelemetry build in CLAUDE.md
kvirund Feb 23, 2026
a59181b
CI: enable universe repo for libopentelemetry-cpp-dev availability
kvirund Feb 23, 2026
bcbba7e
Fix MinGW build and OTEL CI builds
kvirund Feb 23, 2026
6c4f905
observability: configurable data dir via DATA_DIR, Loki retention 1 year
kvirund Feb 23, 2026
d858b70
observability: split data storage into base (named volumes) + overrid…
kvirund Feb 23, 2026
62c8a72
observability: update docs and add user mapping for bind mount permis…
kvirund Feb 23, 2026
20fc8f7
observability: add start.sh launch script
kvirund Feb 23, 2026
d632594
observability: start.sh defaults to 'up -d' when called without argum…
kvirund Feb 23, 2026
2254d96
observability: add install-otel-sdk.sh and document OTEL build process
kvirund Feb 23, 2026
22ad47d
observability: move Grafana host port from 3000 to 12000
kvirund Feb 23, 2026
1f118ac
observability: install vcpkg deps (zip, curl, etc.) before bootstrap
kvirund Feb 23, 2026
90fe1b7
observability: check deps instead of auto-installing with sudo
kvirund Feb 23, 2026
024c27b
observability: translate Grafana dashboards to Russian
kvirund Feb 23, 2026
4855e9b
observability: make Grafana dashboards non-editable
kvirund Feb 23, 2026
f5177dd
CI: always install libprotobuf-dev for OTEL builds (not just on cache…
kvirund Feb 23, 2026
bfe1c35
observability: add service name interpolation (${port}, ${host}, ${ve…
kvirund Feb 23, 2026
23561fc
observability: enable telemetry by default in configuration.xml
kvirund Feb 23, 2026
e0f3f75
observability: set default log mode to duplicate (file + OTEL)
kvirund Feb 23, 2026
8fe14ca
observability: fix install-otel-sdk.sh when vcpkg dir already exists
kvirund Feb 23, 2026
a83ce70
observability: add pkg-config to vcpkg dependency check
kvirund Feb 23, 2026
fb365e1
observability: install opentelemetry-cpp with otlp-http feature via v…
kvirund Feb 23, 2026
0abc5e2
observability: pass --recurse to vcpkg install for otlp-http rebuild
kvirund Feb 23, 2026
12ca6b0
observability: fix compiler warnings in heartbeat and global_objects
kvirund Feb 23, 2026
b588cc2
CI: cache Cygwin manually-built libraries (googletest, yaml-cpp)
kvirund Feb 24, 2026
d9dd92c
CI: use single Cygwin cache key for both Base and YAML jobs
kvirund Feb 24, 2026
572980e
CI: restore separate Cygwin cache keys for Base and YAML jobs
kvirund Feb 24, 2026
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
58 changes: 54 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,17 @@ jobs:
packages: "libsqlite3-dev"
run_tests: true

- name: "Base + Admin API"
cmake_flags: "-DCMAKE_BUILD_TYPE=Release -DENABLE_ADMIN_API=ON"
- name: "Base + Admin API + OTEL"
cmake_flags: "-DCMAKE_BUILD_TYPE=Release -DENABLE_ADMIN_API=ON -DWITH_OTEL=ON -DCMAKE_PREFIX_PATH=/opt/opentelemetry-cpp"
packages: ""
run_tests: true
with_otel: true

- name: "YAML + Admin API"
cmake_flags: "-DCMAKE_BUILD_TYPE=Release -DHAVE_YAML=ON -DENABLE_ADMIN_API=ON"
- name: "YAML + Admin API + OTEL"
cmake_flags: "-DCMAKE_BUILD_TYPE=Release -DHAVE_YAML=ON -DENABLE_ADMIN_API=ON -DWITH_OTEL=ON -DCMAKE_PREFIX_PATH=/opt/opentelemetry-cpp"
packages: "libyaml-cpp-dev"
run_tests: true
with_otel: true

steps:
- uses: actions/checkout@v4
Expand All @@ -52,6 +54,7 @@ jobs:

- name: Install base dependencies
run: |
sudo add-apt-repository universe -y
sudo apt-get update
sudo apt-get install -y \
build-essential \
Expand All @@ -72,6 +75,36 @@ jobs:
run: |
sudo apt-get install -y ${{ matrix.config.packages }}

- name: Install opentelemetry-cpp runtime dependencies
if: matrix.config.with_otel
run: |
sudo apt-get install -y libprotobuf-dev

- name: Cache opentelemetry-cpp
if: matrix.config.with_otel
id: cache-otel
uses: actions/cache@v4
with:
path: /opt/opentelemetry-cpp
key: otel-cpp-1.24.0-ubuntu-x64

- name: Build opentelemetry-cpp
if: matrix.config.with_otel && steps.cache-otel.outputs.cache-hit != 'true'
run: |
sudo apt-get install -y libgrpc++-dev protobuf-compiler-grpc || true
wget -q https://github.com/open-telemetry/opentelemetry-cpp/archive/refs/tags/v1.24.0.tar.gz
tar xzf v1.24.0.tar.gz
cmake -S opentelemetry-cpp-1.24.0 -B otel-build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/opt/opentelemetry-cpp \
-DWITH_OTLP_HTTP=ON \
-DWITH_OTLP_GRPC=OFF \
-DBUILD_TESTING=OFF \
-DWITH_BENCHMARK=OFF \
-DWITH_EXAMPLES=OFF
cmake --build otel-build -j$(nproc)
sudo cmake --install otel-build

- name: Configure CMake
run: |
mkdir -p build
Expand Down Expand Up @@ -271,7 +304,15 @@ jobs:
git
wget

- name: Cache Cygwin libraries
id: cache-cygwin-libs
uses: actions/cache@v4
with:
path: C:\cygwin\usr\local
key: cygwin-gtest-1.14.0

- name: Build and install googletest from source
if: steps.cache-cygwin-libs.outputs.cache-hit != 'true'
shell: C:\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}'
run: |
cd /tmp
Expand Down Expand Up @@ -330,7 +371,15 @@ jobs:
git
wget

- name: Cache Cygwin libraries
id: cache-cygwin-libs
uses: actions/cache@v4
with:
path: C:\cygwin\usr\local
key: cygwin-gtest-1.14.0-yaml-0.7.0

- name: Build and install googletest from source
if: steps.cache-cygwin-libs.outputs.cache-hit != 'true'
shell: C:\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}'
run: |
cd /tmp
Expand All @@ -343,6 +392,7 @@ jobs:
make install

- name: Build and install yaml-cpp from source
if: steps.cache-cygwin-libs.outputs.cache-hit != 'true'
shell: C:\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}'
run: |
cd /tmp
Expand Down
12 changes: 12 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -351,10 +351,22 @@ Use separate build directories for different CMake configurations to avoid lengt
build/ - default build (without optional features)
build_sqlite/ - build with -DHAVE_SQLITE=ON
build_debug/ - debug build with -DCMAKE_BUILD_TYPE=Debug
build_otel/ - build with -DWITH_OTEL=ON (requires vcpkg)
build_test/ - test data and converted worlds (not for compilation)
```
**Always warn the user when changing build directories or running cmake/make in a different directory.**

### OpenTelemetry Build (WITH_OTEL)
opentelemetry-cpp is installed via vcpkg at `~/repos/vcpkg`. Always pass the toolchain file and prefix path:
```bash
cmake -S . -B build_otel \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_OTEL=ON \
-DCMAKE_TOOLCHAIN_FILE=~/repos/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DCMAKE_PREFIX_PATH=~/repos/vcpkg/installed/x64-linux
make -C build_otel -j$(($(nproc)/2))
```

### File Encoding - CRITICAL
**Proper workflow for editing KOI8-R files:**

Expand Down
54 changes: 50 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON)

set(SOURCES
src/engine/structs/blocking_queue.cpp
src/engine/db/influxdb.cpp
src/engine/core/heartbeat.cpp
src/engine/core/heartbeat_commands.cpp
src/gameplay/abilities/abilities_rollsystem.cpp
Expand Down Expand Up @@ -98,6 +97,8 @@ set(SOURCES
src/utils/levenshtein.cpp
src/gameplay/mechanics/liquid.cpp
src/utils/logger.cpp
src/utils/logging/file_log_sender.cpp
src/utils/logging/log_manager.cpp
src/gameplay/magic/magic.cpp
src/gameplay/magic/magic_items.cpp
src/gameplay/magic/magic_rooms.cpp
Expand Down Expand Up @@ -158,6 +159,8 @@ set(SOURCES
src/engine/structs/flags.hpp
src/utils/id_converter.cpp
src/utils/utils_time.cpp
src/utils/tracing/trace_manager.cpp
src/engine/observability/otel_trace_sender.cpp
src/utils/thread_pool.cpp
src/gameplay/mechanics/title.cpp
src/gameplay/statistics/top.cpp
Expand Down Expand Up @@ -461,7 +464,12 @@ set(SOURCES
src/engine/db/player_index.cpp
src/gameplay/skills/addshot.cpp
src/gameplay/classes/mob_classes_info.cpp
src/gameplay/classes/recalc_mob_params_by_vnum.cpp)
src/gameplay/classes/recalc_mob_params_by_vnum.cpp
src/engine/observability/otel_provider.cpp
src/engine/observability/otel_traces.cpp
src/engine/observability/otel_metrics.cpp
src/engine/observability/otel_helpers.cpp
src/engine/observability/otel_log_sender.cpp)



Expand Down Expand Up @@ -511,7 +519,6 @@ set(HEADERS
src/administration/accounts.h
src/engine/core/action_targeting.h
src/engine/structs/blocking_queue.h
src/engine/db/influxdb.h
src/engine/core/heartbeat_commands.h
src/gameplay/mechanics/weather.h
src/gameplay/core/game_limits.h
Expand Down Expand Up @@ -605,6 +612,9 @@ set(HEADERS
src/utils/levenshtein.h
src/gameplay/mechanics/liquid.h
src/utils/logger.h
src/utils/logging/log_sender.h
src/utils/logging/file_log_sender.h
src/utils/logging/log_manager.h
src/gameplay/magic/magic.h
src/gameplay/magic/magic_items.h
src/gameplay/magic/magic_rooms.h
Expand Down Expand Up @@ -662,6 +672,10 @@ set(HEADERS
src/engine/core/sysdep.h
src/engine/network/telnet.h
src/utils/utils_time.h
src/utils/tracing/trace_sender.h
src/utils/tracing/noop_trace_sender.h
src/utils/tracing/trace_manager.h
src/engine/observability/otel_trace_sender.h
src/gameplay/mechanics/title.h
src/gameplay/statistics/top.h
src/utils/utils.h
Expand Down Expand Up @@ -898,6 +912,12 @@ set(HEADERS
src/gameplay/mechanics/tutelar.h
src/gameplay/skills/addshot.h
src/engine/db/player_index.h
src/engine/observability/otel_provider.h
src/engine/observability/otel_traces.h
src/engine/observability/otel_metrics.h
src/engine/observability/otel_helpers.h
src/engine/observability/otel_log_sender.h
src/utils/logging/log_sender.h
src/gameplay/classes/recalc_mob_params_by_vnum.h)

# Build types
Expand Down Expand Up @@ -1204,6 +1224,29 @@ else ()
message(STATUS "SQLite is turned off.")
endif ()

# OpenTelemetry support
if (WITH_OTEL)
message(STATUS "OpenTelemetry integration: ENABLED")

# Find OpenTelemetry from vcpkg
find_package(opentelemetry-cpp CONFIG REQUIRED)

# Define WITH_OTEL for preprocessor
add_definitions(-DWITH_OTEL)

# Link OpenTelemetry libraries
target_link_libraries(circle.library
opentelemetry-cpp::api
opentelemetry-cpp::sdk
opentelemetry-cpp::ext
opentelemetry-cpp::otlp_http_exporter
opentelemetry-cpp::otlp_http_metric_exporter
opentelemetry-cpp::otlp_http_log_record_exporter
opentelemetry-cpp::resources
)
else()
message(STATUS "OpenTelemetry integration: DISABLED")
endif()
# YAML support
if (HAVE_YAML)
# Try to find yaml-cpp via CMake config first
Expand Down Expand Up @@ -1330,7 +1373,7 @@ if (UNIX AND NOT CYGWIN)
set(DEFAULT_WITH_ASAN YES)
else ()
set(DEFAULT_WITH_ASAN NO)
endif ()
endif()
option(WITH_ASAN "Compile with ASAN" ${DEFAULT_WITH_ASAN})

if (WITH_ASAN)
Expand Down Expand Up @@ -1450,6 +1493,9 @@ if (BUILD_TESTS)
add_subdirectory(tests)
endif ()

option(WITH_OTEL "Enable OpenTelemetry integration" OFF)

# vim: set ts=4 sw=4 ai tw=0 noet syntax=cmake :

# =============================================================================
# Data directories setup for running server from build directory
Expand Down
36 changes: 36 additions & 0 deletions lib/misc/configuration.xml
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,40 @@
</server>
</statistics>
-->
<!--
Настройки телеметрии OpenTelemetry (OTLP HTTP).
Требует сборки с -DWITH_OTEL=ON.
Без этой сборки секция будет прочитана, но проигнорирована.

Переменные в service/name:
${port} - порт, на котором запущен сервер (из аргументов командной строки)
${host} - имя хоста (hostname)
${version} - версия сервиса (из service/version ниже)

Режимы логирования (logs/mode):
file-only - логи только в файл (по умолчанию)
otel-only - логи только в OTEL (Loki)
duplicate - логи и в файл, и в OTEL
-->
<telemetry>
<enabled>true</enabled>
<otlp>
<metrics>
<endpoint>http://localhost:4318/v1/metrics</endpoint>
</metrics>
<traces>
<endpoint>http://localhost:4318/v1/traces</endpoint>
</traces>
<logs_otlp>
<endpoint>http://localhost:4318/v1/logs</endpoint>
</logs_otlp>
</otlp>
<service>
<name>bylins-${host}-${port}</name>
<version>1.0.0</version>
</service>
<logs>
<mode>duplicate</mode>
</logs>
</telemetry>
</configuration>
25 changes: 19 additions & 6 deletions src/engine/core/comm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include "engine/db/world_characters.h"
#include "engine/entities/entities_constants.h"
#include "administration/shutdown_parameters.h"
#include "engine/observability/otel_provider.h"
#include "external_trigger.h"
#include "handler.h"
#include "gameplay/clans/house.h"
Expand Down Expand Up @@ -673,7 +674,9 @@ int main_function(int argc, char **argv) {
" -h Print this command line argument help.\n"
" -o <file> Write log to <file> instead of stderr.\n"
" -r Restrict MUD -- no new players allowed.\n"
" -s Suppress special procedure assignments.\n", argv[0]);
" -s Suppress special procedure assignments.\n"
"\n"
" -S <database> Use SQLite database for world loading.\n", argv[0]);
exit(0);

default: printf("SYSERR: Unknown option -%c in argument string.\n", *(argv[pos] + 1));
Expand All @@ -683,7 +686,9 @@ int main_function(int argc, char **argv) {
" -h Print this command line argument help.\n"
" -o <file> Write log to <file> instead of stderr.\n"
" -r Restrict MUD -- no new players allowed.\n"
" -s Suppress special procedure assignments.\n", argv[0]);
" -s Suppress special procedure assignments.\n"
"\n"
" -S <database> Use SQLite database for world loading.\n", argv[0]);
exit(1);
break;
}
Expand Down Expand Up @@ -720,6 +725,7 @@ int main_function(int argc, char **argv) {
// directories are created in the working directory (next to the binary),
// not inside the data directory.
runtime_config.setup_logs();
runtime_config.setup_telemetry(port);
logfile = runtime_config.logs(SYSLOG).handle();
if (chdir(dir) < 0) {
perror("\r\nSYSERR: Fatal error changing to data directory");
Expand Down Expand Up @@ -759,6 +765,11 @@ void stop_game(ush_int port) {

log("Opening mother connection.");
mother_desc = init_socket(port);
if (mother_desc < 0) {
log("SYSERR: Failed to bind to port %d. Server cannot start.", port);
log("Please check if another instance is running or if you have permission to use this port.");
exit(1);
}

#ifdef ENABLE_ADMIN_API
if (runtime_config.admin_api_enabled()) {
Expand Down Expand Up @@ -826,6 +837,9 @@ void stop_game(ush_int port) {
game_loop(mother_desc);
#endif

// Shutdown OTEL providers to flush remaining telemetry
observability::OtelProvider::Instance().Shutdown();

FlushPlayerIndex();

// храны надо сейвить до Crash_save_all_rent(), иначе будем брать бабло у чара при записи
Expand Down Expand Up @@ -1009,9 +1023,9 @@ socket_t init_socket(ush_int port) {
sa.sin_addr = *(get_bind_addr());

if (bind(s, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
perror("SYSERR: bind");
log("SYSERR: bind() failed - port %d is already in use or permission denied", port);
CLOSE_SOCKET(s);
exit(1);
return -1;
}
nonblock(s);
listen(s, 5);
Expand Down Expand Up @@ -2178,8 +2192,7 @@ RETSIGTYPE checkpointing(int/* sig*/) {
}

RETSIGTYPE hupsig(int/* sig*/) {
log("SYSERR: Received SIGHUP, SIGINT, or SIGTERM. Shutting down...");
exit(1); // perhaps something more elegant should substituted
shutdown_parameters.shutdown_now();
}

#endif // CIRCLE_UNIX
Expand Down
Loading
Loading