Under Linux Vserver SOCK_RAW is quite limited. Only IPPROTO_ICMP works,
so try to use it.
check_length_order() also doesn't work because sendto is also limited.
Fortunately under linux check_length_order is not needed as described
in comment around check_length_order.
ssize_t bytes_sent;
int packet_size;
+#ifdef __linux__
+ /* Linux will accept either byte order and check below fails to work
+ * in some cases due to sendto() returning EPERM. */
+ return;
+#endif
+
memset(¶m, 0, sizeof(struct probe_param_t));
param.ip_version = 4;
param.protocol = IPPROTO_ICMP;
send_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if (send_socket == -1) {
- return -1;
+ send_socket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
+ if (send_socket == -1) {
+ return -1;
+ }
}
/*