Sure it has, the connections just don't last longer than one packet. (-:
Ah - so "connection" survivability for UDP-based apps then becomes quite easy
since the problem doesn't exist :-)
I don't know what the API standards say, but in many implementations the app can just do a sendto() which will make UDP pick a port number for the duration of the lifetime of the socket. Thus the application will be able to receive packets sent in to that port number.
The problem is that the unmodified server extracts the identifier (aka IP
address) in step2 thus you'd need to make the client pick a long-lived
identifier in step1, or make step4 pass the identifier+port to the server.
In either case this implies modifications to the application.