6 UDPStream::UDPStream(const sockaddr_in6 &dst, MarkPool *mark_pool)
11 sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
13 // Oops. Ignore this output, then.
18 if (mark_pool != NULL) {
19 fwmark = mark_pool->get_mark();
20 if (setsockopt(sock, SOL_SOCKET, SO_MARK, &fwmark, sizeof(fwmark)) == -1) {
22 log_perror("setsockopt(SO_MARK)");
28 UDPStream::~UDPStream()
33 if (mark_pool != NULL) {
34 mark_pool->release_mark(fwmark);
38 void UDPStream::send(const char *data, size_t bytes)
43 ssize_t err = sendto(sock, data, bytes, 0, reinterpret_cast<sockaddr *>(&dst), sizeof(dst));