you are completely missing the event loop to do the handshake. If possible try to run and debug the sample server and client program. The eventloop (libev used by quiche in their sample) is responsible for doing the handshake. unlike other protocols quiche doesnt doesnt manage sockets or event loops (timer), its up to the client(app) to provide them.
Thanks, Arun A.