<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<div dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, "EmojiFont", "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<div><span style="font-family: Arial, Helvetica, sans-serif;">Hi systemd-devel,</span><br>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><br>
<span style="font-family: Arial, Helvetica, sans-serif;"></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;">Sorry to bug you with another user question.<br>
</span></div>
<div dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, "EmojiFont", "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></div>
<div dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, "EmojiFont", "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<span style="font-family: Arial, Helvetica, sans-serif;">I have a socket activated daemon, call it mydaemon, and I have trouble finding out who connects to it.</span>
<p><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></p>
<p><span style="font-family: Arial, Helvetica, sans-serif;">mydaemon.socket contains:</span></p>
<p><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></p>
<div><span style="font-family: "Courier New", monospace;"><span style="font-family: "Courier New", monospace;">
</span>[Socket]</span><br>
<span style="font-family: "Courier New", monospace;"> ListenStream=9999</span><br>
</div>
<div><br>
</div>
<div><span style="font-family: Arial, Helvetica, sans-serif;">When I connect using IPv4 using</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></div>
<div><span style="font-family: "Courier New", monospace;"> nc -4 localhost 9999<br>
</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;">then mydaemon does</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></div>
<div><span style="font-family: "Courier New", monospace;"> sockaddr_in6 peer;</span><br>
<span style="font-family: "Courier New", monospace;"> socklen_t peer_size=sizeof(peer);</span><br>
<span style="font-family: "Courier New", monospace;"> accept(3,(struct sockaddr *)&peer,sizeof(peer))</span><br>
</div>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></span>
<p><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;">Afterwards,
</span><span style="font-family: Arial, Helvetica, sans-serif;">peer.</span></span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;">sin6_family</span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;">
is </span><span style="font-family: Arial, Helvetica, sans-serif;">AF_INET6</span><span style="font-family: Arial, Helvetica, sans-serif;"> and peer.<span>sin6_addr contains some gibberish like <span>a00:e5ae::</span></span></span></span></span></p>
<p><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><span><span><br>
</span></span></span></span></span></p>
<p><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"><span><span>If I connect more than once, the gibberish changes from connection to connection.<br>
</span></span></span></span></span></p>
<p><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></p>
<p><span style="font-family: Arial, Helvetica, sans-serif;">Something similar happens if I connect using IPv6.</span></p>
<p><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></p>
<p><span style="font-family: Arial, Helvetica, sans-serif;">If I change <span style="font-family: Arial, Helvetica, sans-serif;">
mydaemon.socket</span> to<br>
</span></p>
<p><span style="font-family: Arial, Helvetica, sans-serif;"></span></p>
<p><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></p>
<div><span style="font-family: "Courier New", monospace;"><span style="font-family: "Courier New", monospace;">
</span>[Socket]</span><br>
<span style="font-family: "Courier New", monospace;"> ListenStream=0.0.0.0:9999</span><br>
</div>
<div><br>
</div>
<div><span style="font-family: Arial, Helvetica, sans-serif;">Then <span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;"></span><span style="font-family: Arial, Helvetica, sans-serif;">peer.</span></span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;">sin6_family</span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif;">
becomes </span><span style="font-family: Arial, Helvetica, sans-serif;">AF_INET as it should. But if peer is cast to struct sockaddr_in then peer.<span>sin_addr</span> still contains gibberish like
<span>2.0.191.150 (I expected something like 127.0.0.1 or <span>192.168.0.99</span>).</span></span><span style="font-family: Arial, Helvetica, sans-serif;"></span></span></span>
<div><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></div>
<span style="font-family: "Courier New", monospace;"></span>When I connect from other machines, the peer address still is gibberish.</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;">If mydaemon creates the listening socket, I can easily get the peer address.</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;">I suspect that when systemd creates the listening socket then accept(3,...) returns a socket which is connected to a local socket created by systemd.</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;">QUESTION: Is that suspicion correct? And if yes, is there are way to recover the address of the actually connecting peer?</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;">Cheers,</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;">Klaus<br>
</span></div>
<div><span style="font-family: Arial, Helvetica, sans-serif;"><br>
</span></div>
<span style="font-family: "Courier New", monospace;"></span></div>
</div>
</body>
</html>