请让我指出源代码,其中Java使用 [DllImport(WS2_32, SetLastError = true)]
处理Java的底层套接字网络逻辑我试图了解Java如何使用DLLImport处理C#这样的底层网络逻辑。
很难找到java.net.Socket源代码中SocketImpl或SocketImplFactory逻辑的实现。即使我能够追溯到AbstractPlainSocketImpl.java的SocketImpl暗示,似乎也没有实现 connect0 进行更深入的研究。
答案 0 :(得分:1)
您应查找java.net.SocketImpl之类的DualStackPlainSocketImpl的具体子类。
在某些地方实现调用本机函数:
connectResult = connect0(nativefd, address, port);
....
static native int connect0(int fd, InetAddress remote, int remotePort)
throws IOException;
本机代码通常是特定于平台的,并由C ++或C实现。 来自DualStackPlainSocketImpl.c的OpenJDK / jdk8u的一个Windows示例:
JNIEXPORT jint JNICALL Java_java_net_DualStackPlainSocketImpl_connect0
(JNIEnv *env, jclass clazz, jint fd, jobject iaObj, jint port)
{
SOCKETADDRESS sa;
...
rv = connect(fd, (struct sockaddr *)&sa, sa_len);
在示例connnect()
中,调用可能是您要查找的级别:Windows中的WinSock2 API call。在Linux来源中,您会发现类似的connnect()系统调用。