I am build a VPN app for macOS by useing Packet Tunnel Provider. I try to use UDP socket to send data to server in the Extension, but the socket "sendto" return -1 with errno set to EPERM(Operation not permitted). However I try the same code in iOS, it is working fine. Below is the sample code.
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
int sock = socket(AF_INET, SOCK_DGRAM, 0);
assert(sock >= 0);
int success = fcntl(sock, F_SETFL, O_NONBLOCK);
assert(success == 0);
struct sockaddr_in addr = {
.sin_len = sizeof(struct sockaddr),
.sin_family = AF_INET,
.sin_port = htons(1235)
};
success = bind(sock, (const struct sockaddr *) &addr, sizeof(addr));
assert(success == 0);
struct sockaddr_in addrsock = {
.sin_len = sizeof(struct sockaddr),
.sin_family = AF_INET,
.sin_port = htons(1235),
.sin_addr.s_addr = inet_addr("119.xx.***.102")
};
char *my_messsage = "this is a test message";
ssize_t bytesSent = sendto(
sock,
my_messsage,
strlen(my_messsage),
0,
(const struct sockaddr *) &addrsock,
sizeof(addr)
);
Thanks!