Hallo,

On Tue, Jan 30, 2024 at 11:50:37PM +0100, Andreas Roth wrote:
> my-www.socket:
> [Socket]
> ListenStream=80
> BindIPv6Only=both
> 
> [Install]
> WantedBy=sockets.target
> 
> systemctl start my-www.socket
> 
> Wenn ich nun mit z.b. curl auf port 80 zugreife, bekomme ich den Fehler
> 
> Jan 30 23:40:07 docker01 systemd[1]: my-www.socket: Failed with result 
> 'service-start-limit-hit‘.
> 
> Jan 30 23:40:07 docker01 testwebserver[9105]: OSError: [Errno 98] Address 
> already in use
> Jan 30 23:40:07 docker01 systemd[1]: my-www.service: Main process exited, 
> code=exited, status=1/FAILURE
> 
> Der testwebserver Dienst versucht sich auf port 80 zu binden, wo ja bereits 
> der systemd läuft und fällt dann um. 
Ja, das bind(2)  macht systemd, das kannst Du nicht nochmal machen.
Dein Programm bekommt bloss den filedescriptor. Entweder im State "Listen" dann 
musst Du accept(2)
machen oder nach dem accept
(siehe 
https://www.freedesktop.org/software/systemd/man/latest/systemd.socket.html
- Option Accept=) dann wird eine Instanz pro eingehender Connection gestartet.

Unter
https://www.freedesktop.org/software/systemd/man/latest/sd_listen_fds.html#
findest Du wie Du an den Filedescriptor dran kommst.

Grüsse
Andreas

Attachment: signature.asc
Description: PGP signature

Antwort per Email an