In a way, they're used.
In a proper systemd socket activation, the service doesn't need to know or define the ports it's listening to, they just get a bunch of file descriptors and use those.
So we could have a command line in the service file with no ports and it looks like it works; but that is only because snmptrapd is sort-of looking for UDP port 162.
If you change the socket definition to another port, say 164 you get this:
Feb 02 15:57:37 elmo snmptrapd[9123]: couldn't open udp:162 -- errno 13 ("Permission denied")
Feb 02 15:57:37 elmo snmptrapd[9123]: couldn't open udp:162 -- errno 13 ("Permission denied")
system opens port 164, a trap to port 164 starts snmptrapd which not only listens to the systemd FD, but opens its own ports too running as a non-priv user.
OK, so change the service definiton to listen to some port above 1024, it should be ok because it can open that port and use the systemd FD. For some reason
it doesn't (as in it starts but there are no messages).
What that means is the ports that are defined in the socket file need to match the ports in the service file. snmptrapd is shipped with that:
$ grep 162 debian/snmptrapd.s*
debian/snmptrapd.service:ExecStart=/usr/sbin/snmptrapd -LOw -f udp:162 udp6:162
debian/snmptrapd.socket:ListenDatagram=
0.0.0.0:162debian/snmptrapd.socket:ListenDatagram=[::]:162
debian/snmptrapd.socket:# ListenStream=
0.0.0.0:162debian/snmptrapd.socket:# ListenStream=[::]:162