Как Java обрабатывает низкоуровневую логику Socket Networking - PullRequest
0 голосов
/ 01 апреля 2019

Может, кто-нибудь подскажет мне исходный код, где Java обрабатывает низкоуровневую логику Socket Networking, как C # использует [DllImport (WS2_32, SetLastError = true)]

Я пытаюсь понять, как Java обрабатывает сетевую логику низкого уровня, как это делает C #, используя DLLImport.

Не удается отследить реализацию логики SocketImpl или SocketImplFactory в java.net.Socket исходный код.Даже если мне удастся отследить его до AbstractPlainSocketImpl.java имплементации SocketImpl, похоже, нет реализации для connect0 , чтобы копать глубже.

1 Ответ

1 голос
/ 01 апреля 2019

Вы должны искать конкретные дочерние классы java.net.SocketImpl подобно DualStackPlainSocketImpl .

Есть места, где реализация вызывает собственные функции:

connectResult = connect0(nativefd, address, port);
....
static native int connect0(int fd, InetAddress remote, int remotePort)
    throws IOException;

Нативный код довольно часто зависит от платформы и реализуется на C ++ или C. Один пример Windows из DualStackPlainSocketImpl.c из OpenJDK / jdk8u:

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() вызов, вероятно, является тем уровнем, который вы ищете: WinSock2 API call в Windows. Из исходников Linux вы найдете аналогичный connnect () системный вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...