/**
* net_is_connect - check if destination is reachable.
* @dev_name: net device's name, can be null.
* @dst: destination.
*
* The parameter dev_name can be set to NULL.
* In case that value of dev_name equals NULL,
* return value 0 means destination is unreachable by all net device,
* return value 1 means destination is reachable by at least one net device.
*
* Destination can take the form of IP Address such as: 192.168.1.1,
* or take the form of URL such as: www.baidu.com .
*
* return 0 if destination is unreachable, 1 if reachable.
*/
//dev_name eth0 / wlan0 ; dst : www.baidu.com
int net_is_connect(const char *dev_name, const char *dst)
{
FILE *stream;
unsigned int cnt = 1;
char recv_buf[32] = {0};
char cmd_buf[256] = {0};
if (!dst) {
NET_ERR("invalid destination: null");
return 0;
}
if (dev_name)
sprintf(cmd_buf, "ping %s -I%s -c%d -w%d -4 | grep time= | wc -l",
dst, dev_name, cnt, cnt + 1);
else
sprintf(cmd_buf, "ping %s -c%d -w%d -4 | grep time= | wc -l",
dst, cnt, cnt + 1);
stream = popen(cmd_buf, "r");
if (stream) {
fread(recv_buf, sizeof(char), sizeof(recv_buf) - 1, stream);
pclose(stream);
if (atoi(recv_buf) > 0)
return 1;
}
return 0;
}