public BSDV6NativeSocket(int family, int type, int protocol) throws Exception { m_sock = socket(family, type, protocol); }
@Override public void allowFragmentation(final boolean frag) throws IOException { allowFragmentation(IPPROTO_IPV6, IPV6_DONTFRAG, frag); }
@Override public int receive(NativeDatagramPacket p) { bsd_sockaddr_in6 in_addr = new bsd_sockaddr_in6(); int[] szRef = new int[] { in_addr.size() }; ByteBuffer buf = p.getContent(); int n = recvfrom(getSock(), buf, buf.capacity(), 0, in_addr, szRef); p.setLength(n); p.setAddress(in_addr.getAddress()); p.setPort(in_addr.getPort()); return n; }
@Override public void setTrafficClass(final int tc) throws LastErrorException { final IntByReference tc_ptr = new IntByReference(tc); try { setsockopt(getSock(), IPPROTO_IPV6, IPV6_TCLASS, tc_ptr.getPointer(), Pointer.SIZE); } catch (final LastErrorException e) { throw new RuntimeException("setsockopt: " + strerror(e.getErrorCode())); } }
@Override public void close() { close(m_sock); m_sock = -1; }
@Override public int send(final NativeDatagramPacket p) { final ByteBuffer buf = p.getContent(); final bsd_sockaddr_in6 destAddr = new bsd_sockaddr_in6(p.getAddress(), p.getPort()); final int socket = getSock(); SocketUtils.assertSocketValid(socket); return sendto(socket, buf, buf.remaining(), 0, destAddr, destAddr.size()); }
@Override public int receive(final NativeDatagramPacket p) { final bsd_sockaddr_in6 in_addr = new bsd_sockaddr_in6(); final int[] szRef = new int[] { in_addr.size() }; final int socket = getSock(); final ByteBuffer buf = p.getContent(); SocketUtils.assertSocketValid(socket); final int n = recvfrom(socket, buf, buf.capacity(), 0, in_addr, szRef); p.setLength(n); p.setAddress(in_addr.getAddress()); p.setPort(in_addr.getPort()); return n; }
@Override public void setTrafficClass(final int tc) throws LastErrorException { final IntByReference tc_ptr = new IntByReference(tc); try { setsockopt(getSock(), IPPROTO_IPV6, IPV6_TCLASS, tc_ptr.getPointer(), Pointer.SIZE); } catch (final LastErrorException e) { throw new RuntimeException("setsockopt: " + strerror(e.getErrorCode())); } }
@Override public void close() { close(m_sock); m_sock = -1; }
@Override public int send(final NativeDatagramPacket p) { final ByteBuffer buf = p.getContent(); final bsd_sockaddr_in6 destAddr = new bsd_sockaddr_in6(p.getAddress(), p.getPort()); final int socket = getSock(); SocketUtils.assertSocketValid(socket); return sendto(socket, buf, buf.remaining(), 0, destAddr, destAddr.size()); }
@Override public int receive(final NativeDatagramPacket p) { final bsd_sockaddr_in6 in_addr = new bsd_sockaddr_in6(); final int[] szRef = new int[] { in_addr.size() }; final int socket = getSock(); final ByteBuffer buf = p.getContent(); SocketUtils.assertSocketValid(socket); final int n = recvfrom(socket, buf, buf.capacity(), 0, in_addr, szRef); p.setLength(n); p.setAddress(in_addr.getAddress()); p.setPort(in_addr.getPort()); return n; }
@Override public void allowFragmentation(final boolean frag) throws IOException { allowFragmentation(IPPROTO_IPV6, IPV6_DONTFRAG, frag); }