Skip to content

Commit da187e7

Browse files
fix: make PCNTL extension optional for StdioServerTransport
Signal handling now gracefully degrades when PCNTL extension is unavailable or the event loop doesn't support signals. The transport continues to work normally since termination also happens when STDIN closes.
1 parent 2accc57 commit da187e7

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"symfony/var-dumper": "^6.4.11|^7.1.5"
4747
},
4848
"suggest": {
49-
"react/http": "Required for using the ReactPHP HTTP transport handler (^1.11 recommended)."
49+
"ext-pcntl": "For signal handling support when using StdioServerTransport with StreamSelectLoop"
5050
},
5151
"autoload": {
5252
"psr-4": {

src/Transports/StdioServerTransport.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,16 @@ public function listen(): void
148148
$this->close();
149149
});
150150

151-
$signalHandler = function (int $signal) {
152-
$this->logger->info("Received signal {$signal}, shutting down.");
153-
$this->close();
154-
};
155-
$this->loop->addSignal(SIGTERM, $signalHandler);
156-
$this->loop->addSignal(SIGINT, $signalHandler);
151+
try {
152+
$signalHandler = function (int $signal) {
153+
$this->logger->info("Received signal {$signal}, shutting down.");
154+
$this->close();
155+
};
156+
$this->loop->addSignal(SIGTERM, $signalHandler);
157+
$this->loop->addSignal(SIGINT, $signalHandler);
158+
} catch (Throwable $e) {
159+
$this->logger->debug('Signal handling not supported by current event loop.');
160+
}
157161

158162
$this->logger->info('Server is up and listening on STDIN 🚀');
159163

0 commit comments

Comments
 (0)