In core-default.xml, hadoop.rpc.socket.factory.class.default defaults to org.apache.hadoop.net.StandardSocketFactory. However, in CommonConfigurationKeysPublic.java, there is no default for this key. This is inconsistent (defaults in the code versus defaults in the XML files should match.) It also leads to problems with RemoteBlockReader2, since the default SocketFactory creates a Socket without an associated channel. RemoteBlockReader2 cannot use such a Socket.
This bug only really becomes apparent when you create a Configuration using the Configuration(loadDefaults=true) constructor. Thanks to AB Srinivasan for his help in discovering this bug.