equal
deleted
inserted
replaced
125 return JNI_FALSE; |
125 return JNI_FALSE; |
126 } |
126 } |
127 |
127 |
128 JNIEXPORT jint JNICALL |
128 JNIEXPORT jint JNICALL |
129 Java_sun_nio_ch_Net_socket0(JNIEnv *env, jclass cl, jboolean preferIPv6, |
129 Java_sun_nio_ch_Net_socket0(JNIEnv *env, jclass cl, jboolean preferIPv6, |
130 jboolean stream, jboolean reuse) |
130 jboolean stream, jboolean reuse, jboolean fastLoopback) |
131 { |
131 { |
132 SOCKET s; |
132 SOCKET s; |
133 int domain = (preferIPv6) ? AF_INET6 : AF_INET; |
133 int domain = (preferIPv6) ? AF_INET6 : AF_INET; |
134 |
134 |
135 s = socket(domain, (stream ? SOCK_STREAM : SOCK_DGRAM), 0); |
135 s = socket(domain, (stream ? SOCK_STREAM : SOCK_DGRAM), 0); |
148 setConnectionReset(s, FALSE); |
148 setConnectionReset(s, FALSE); |
149 } |
149 } |
150 |
150 |
151 } else { |
151 } else { |
152 NET_ThrowNew(env, WSAGetLastError(), "socket"); |
152 NET_ThrowNew(env, WSAGetLastError(), "socket"); |
|
153 } |
|
154 |
|
155 if (stream && fastLoopback) { |
|
156 static int loopback_available = 1; |
|
157 if (loopback_available) { |
|
158 int rv = NET_EnableFastTcpLoopback((jint)s); |
|
159 if (rv) { |
|
160 if (rv == WSAEOPNOTSUPP) { |
|
161 loopback_available = 0; |
|
162 } else { |
|
163 NET_ThrowNew(env, rv, "fastLoopback"); |
|
164 } |
|
165 } |
|
166 } |
153 } |
167 } |
154 |
168 |
155 return (jint)s; |
169 return (jint)s; |
156 } |
170 } |
157 |
171 |