mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8235193: (dc) Remove JNI overhead from DatagramChannel.send implementation
Reviewed-by: chegar
This commit is contained in:
parent
386b387ef2
commit
e7d68cd13b
10 changed files with 438 additions and 159 deletions
|
@ -129,25 +129,20 @@ Java_sun_nio_ch_DatagramChannelImpl_receive0(JNIEnv *env, jclass clazz,
|
|||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_sun_nio_ch_DatagramChannelImpl_send0(JNIEnv *env, jclass clazz,
|
||||
jboolean preferIPv6, jobject fdo, jlong address,
|
||||
jint len, jobject destAddress, jint destPort)
|
||||
jobject fdo, jlong bufAddress, jint len,
|
||||
jlong targetAddress, jint targetAddressLen)
|
||||
{
|
||||
jint fd = fdval(env, fdo);
|
||||
void *buf = (void *)jlong_to_ptr(address);
|
||||
SOCKETADDRESS sa;
|
||||
int sa_len = 0;
|
||||
jint n = 0;
|
||||
void *buf = (void *)jlong_to_ptr(bufAddress);
|
||||
SOCKETADDRESS *sa = (SOCKETADDRESS *)jlong_to_ptr(targetAddress);
|
||||
socklen_t sa_len = (socklen_t) targetAddressLen;
|
||||
jint n;
|
||||
|
||||
if (len > MAX_PACKET_LEN) {
|
||||
len = MAX_PACKET_LEN;
|
||||
}
|
||||
|
||||
if (NET_InetAddressToSockaddr(env, destAddress, destPort, &sa,
|
||||
&sa_len, preferIPv6) != 0) {
|
||||
return IOS_THROWN;
|
||||
}
|
||||
|
||||
n = sendto(fd, buf, len, 0, &sa.sa, sa_len);
|
||||
n = sendto(fd, buf, len, 0, (struct sockaddr *)sa, sa_len);
|
||||
if (n < 0) {
|
||||
if (errno == EAGAIN || errno == EWOULDBLOCK) {
|
||||
return IOS_UNAVAILABLE;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue