I understand what your view is, and for the most part I agree-- but I still don't think there's any reason to introduce a new API when there is an existing one that works fine. Just like many other features in mIRC's language, you tend to have to abandon the "conceptually ideal" solution for the "it works" solution.

For reference, the reason $sock().saddr/sport were used were likely for consistency's sake. Introducing a $udpaddr and $udpport would be *more* confusing, since there would be no related $tcpaddr and $tcpport for the TCP events. On the flipside, most scripters are looking to $sock() to get information from the socket, and there is no precedence for event specific identifiers in SOCK* events. It would be confusing as well, in this sense, to introduce event specific identifiers for one thing when virtually everything else is tied to $sock(). IMO it makes sense here to break the conceptually clean design in order to maintain consistency.