1 #include <sys/socket.h>
9 UDPStream::UDPStream(const sockaddr_in6 &dst, MarkPool *mark_pool)
14 sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
16 // Oops. Ignore this output, then.
21 if (mark_pool != NULL) {
22 fwmark = mark_pool->get_mark();
23 if (setsockopt(sock, SOL_SOCKET, SO_MARK, &fwmark, sizeof(fwmark)) == -1) {
25 log_perror("setsockopt(SO_MARK)");
31 UDPStream::~UDPStream()
36 if (mark_pool != NULL) {
37 mark_pool->release_mark(fwmark);
41 void UDPStream::send(const char *data, size_t bytes)
46 ssize_t err = sendto(sock, data, bytes, 0, reinterpret_cast<sockaddr *>(&dst), sizeof(dst));