opts = &default_opts;
 
        optlen = sizeof(type);
-       if (getsockopt(server_fd, SOL_SOCKET, SO_TYPE, &type, &optlen)) {
-               log_err("getsockopt(SOL_TYPE)");
-               return -1;
+
+       if (opts->type) {
+               type = opts->type;
+       } else {
+               if (getsockopt(server_fd, SOL_SOCKET, SO_TYPE, &type, &optlen)) {
+                       log_err("getsockopt(SOL_TYPE)");
+                       return -1;
+               }
        }
 
-       if (getsockopt(server_fd, SOL_SOCKET, SO_PROTOCOL, &protocol, &optlen)) {
-               log_err("getsockopt(SOL_PROTOCOL)");
-               return -1;
+       if (opts->proto) {
+               protocol = opts->proto;
+       } else {
+               if (getsockopt(server_fd, SOL_SOCKET, SO_PROTOCOL, &protocol, &optlen)) {
+                       log_err("getsockopt(SOL_PROTOCOL)");
+                       return -1;
+               }
        }
 
        addrlen = sizeof(addr);