The trick is VRRP (112) is the protocol, it is not UDP, so raw sockets have to be used.
// VRRP is the protocol, not UDP. int sockfd = socket(AF_INET, SOCK_RAW, VRRP_PORT);