On 9/28/22 08:12, David Gibson wrote:
@@ -253,9 +253,27 @@ static void net_stream_accept(void *opaque)
s->fd = fd;
s->nc.link_down = false;
net_stream_connect(s);
- snprintf(s->nc.info_str, sizeof(s->nc.info_str),
- "connection from %s:%d",
- inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
+ switch (saddr.ss_family) {
+ case AF_INET: {
+ struct sockaddr_in *saddr_in = (struct sockaddr_in *)&saddr;
+
+ snprintf(s->nc.info_str, sizeof(s->nc.info_str),
+ "connection from %s:%d",
+ inet_ntoa(saddr_in->sin_addr), ntohs(saddr_in->sin_port));
So, here you print the address from which the connection has come -
the remote address.
+ break;
+ }
+ case AF_UNIX: {
+ struct sockaddr_un saddr_un;
+
+ len = sizeof(saddr_un);
+ getsockname(s->listen_fd, (struct sockaddr *)&saddr_un, &len);
+ snprintf(s->nc.info_str, sizeof(s->nc.info_str),
+ "connect from %s", saddr_un.sun_path);
Here you print the bound address - the local address. Does that make
sense? I mean, in almost every occasion the remote Unix socket will
be anonymous, so it probably doesn't make sense to display that, but
is the bound address actually a useful substitute?
Maybe it should just be "connect from Unix socket".
I agree the needed information is "connected" and type "unix".
But I think more information we can put here can be useful for a debugging
purpose.
Thanks,
Laurent