How To Make Java Ignore IPv6

Sure, IPv6 is going to save us all from the apocalypse, defeat communism, cure the swine flu, and bake you the most delicious brownies you’ve ever tasted.  Someday.  But in the meantime, for real people trying to do real work, it’s a fucking nuisance.

As more systems have started shipping with the technology, little compatibility issues continue to crop up.  One of the more recurrent problems I’ve encountered is incompatibilities between Java and IPv6 on Linux – specifically Ubuntu.  Up until recently, it was quite easy to eliminate the problem by merely blacklisting the appropriate kernel modules, thusly:

# echo ‘blacklist net-pf-10’ » /etc/modprobe.d/blacklist.conf # echo ‘blacklist ipv6’ » /etc/modprobe.d/blacklist.conf

However, as of Ubuntu 9.04 (Jaunty), IPv6 support is no longer a module – it’s hard-compiled into the shipping kernels.  No big deal, though, because there’s a system control variable that allows you to remove IPv6 support from the kernel.

# echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6

Except that doesn’t work.  It seems there was a kernel bug where that setting was just plain broken.  And it hasn’t been shipped with the normal Ubuntu kernels yet.  So, what is one to do, short of re-compiling their own kernel?

Here is a copy-paste from an IM exchange I had with Java earlier:

# Java has entered the chat.

Java: Hey dude, what’s up?

Ardvaark: hey, i’m having a problem getting you to listen to an ipv4 socket when ipv6 is installed on my ubuntu box

Java: Yeah! I totally support IPv6 now! You didn’t even have to do anything because I abstract you from the OS details! Isn’t that great?!

Ardvaark: awesome, i guess, except that it doesn’t work.

Ardvaark: i really need you to just listen on ipv4, because the tivo just doesn’t like galleon on ipv6

Ardvaark: so sit the hell down, shut the hell up, and use ipv4

Ardvaark: pretty please

Java: Okay, geez, no need to get all pissy about it.

Ardvaark: and while you’re at it, could you please stop using like half a gig RAM just for a silly hello world program?

Java: Don’t push your luck.

# Java has left the chat.

And now that we’re back in reality, the magic word is -Djava.net.preferIPv4Stack=true.