mirror of
https://github.com/traviscross/mtr.git
synced 2024-09-21 18:37:10 +00:00
Also try SOCK_RAW/IPPROTO_ICMP when other fail.
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.
This commit is contained in:
parent
d2fe63fb77
commit
455ad8a2b1
@ -128,6 +128,12 @@ void check_length_order(
|
|||||||
ssize_t bytes_sent;
|
ssize_t bytes_sent;
|
||||||
int packet_size;
|
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));
|
memset(¶m, 0, sizeof(struct probe_param_t));
|
||||||
param.ip_version = 4;
|
param.ip_version = 4;
|
||||||
param.protocol = IPPROTO_ICMP;
|
param.protocol = IPPROTO_ICMP;
|
||||||
@ -230,7 +236,10 @@ int open_ip4_sockets_raw(
|
|||||||
|
|
||||||
send_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
|
send_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
|
||||||
if (send_socket == -1) {
|
if (send_socket == -1) {
|
||||||
return -1;
|
send_socket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
|
||||||
|
if (send_socket == -1) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user