src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c

Print this page

        

*** 351,361 **** while(1) { if (select(/*ignored*/fd+1, &tbl, 0, 0, &t) <= 0) { break; } if (recvfrom(fd, buf, 1, MSG_PEEK, ! (struct sockaddr *)&rmtaddr, &addrlen) != JVM_IO_ERR) { break; } if (WSAGetLastError() != WSAECONNRESET) { /* some other error - we don't care here */ break; --- 351,361 ---- while(1) { if (select(/*ignored*/fd+1, &tbl, 0, 0, &t) <= 0) { break; } if (recvfrom(fd, buf, 1, MSG_PEEK, ! (struct sockaddr *)&rmtaddr, &addrlen) != SOCKET_ERROR) { break; } if (WSAGetLastError() != WSAECONNRESET) { /* some other error - we don't care here */ break;
*** 506,516 **** if (fd == -1) { /* must be an IPV6 only socket. */ fd = fd1; } if (getsockname(fd, (struct sockaddr *)&lcladdr, &lcladdrlen) == -1) { ! NET_ThrowCurrent(env, "JVM_GetSockName"); return; } port = ntohs((u_short) GET_PORT (&lcladdr)); } (*env)->SetIntField(env, this, pdsi_localPortID, port); --- 506,516 ---- if (fd == -1) { /* must be an IPV6 only socket. */ fd = fd1; } if (getsockname(fd, (struct sockaddr *)&lcladdr, &lcladdrlen) == -1) { ! NET_ThrowCurrent(env, "getsockname"); return; } port = ntohs((u_short) GET_PORT (&lcladdr)); } (*env)->SetIntField(env, this, pdsi_localPortID, port);
*** 698,708 **** if (packetBufferLen > MAX_PACKET_LEN) { packetBufferLen = MAX_PACKET_LEN; } if (connected) { ! addrp = 0; /* arg to JVM_Sendto () null in this case */ addrlen = 0; } else { if (NET_InetAddressToSockaddr(env, iaObj, packetPort, (struct sockaddr *)&rmtaddr, &addrlen, JNI_FALSE) != 0) { return; } --- 698,708 ---- if (packetBufferLen > MAX_PACKET_LEN) { packetBufferLen = MAX_PACKET_LEN; } if (connected) { ! addrp = 0; /* arg to sendto () null in this case */ addrlen = 0; } else { if (NET_InetAddressToSockaddr(env, iaObj, packetPort, (struct sockaddr *)&rmtaddr, &addrlen, JNI_FALSE) != 0) { return; }
*** 755,773 **** fullPacket = &(BUF[0]); } (*env)->GetByteArrayRegion(env, packetBuffer, packetBufferOffset, packetBufferLen, (jbyte *)fullPacket); ! switch (sendto(fd, fullPacket, packetBufferLen, 0, ! (struct sockaddr *)addrp, addrlen)) { ! case JVM_IO_ERR: NET_ThrowCurrent(env, "Datagram send failed"); - break; - - case JVM_IO_INTR: - JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", - "operation interrupted"); } if (packetBufferLen > MAX_BUFFER_LEN) { free(fullPacket); } --- 755,767 ---- fullPacket = &(BUF[0]); } (*env)->GetByteArrayRegion(env, packetBuffer, packetBufferOffset, packetBufferLen, (jbyte *)fullPacket); ! if (sendto(fd, fullPacket, packetBufferLen, 0, ! (struct sockaddr *)addrp, addrlen) == SOCKET_ERROR) { NET_ThrowCurrent(env, "Datagram send failed"); } if (packetBufferLen > MAX_BUFFER_LEN) { free(fullPacket); }
*** 849,873 **** ret = NET_Timeout (fd, timeout); if (ret == 0) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", "Peek timed out"); return ret; ! } else if (ret == JVM_IO_ERR) { NET_ThrowCurrent(env, "timeout in datagram socket peek"); return ret; - } else if (ret == JVM_IO_INTR) { - JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", - "operation interrupted"); - return ret; } } /* now try the peek */ n = recvfrom(fd, buf, 1, MSG_PEEK, (struct sockaddr *)&remote_addr, &remote_addrsize); ! if (n == JVM_IO_ERR) { if (WSAGetLastError() == WSAECONNRESET) { jboolean connected; /* * An icmp port unreachable - we must receive this as Windows --- 843,863 ---- ret = NET_Timeout (fd, timeout); if (ret == 0) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", "Peek timed out"); return ret; ! } else if (ret == -1) { NET_ThrowCurrent(env, "timeout in datagram socket peek"); return ret; } } /* now try the peek */ n = recvfrom(fd, buf, 1, MSG_PEEK, (struct sockaddr *)&remote_addr, &remote_addrsize); ! if (n == SOCKET_ERROR) { if (WSAGetLastError() == WSAECONNRESET) { jboolean connected; /* * An icmp port unreachable - we must receive this as Windows
*** 903,920 **** retry = TRUE; } } } while (retry); ! if (n == JVM_IO_ERR && WSAGetLastError() != WSAEMSGSIZE) { NET_ThrowCurrent(env, "Datagram peek failed"); return 0; } - if (n == JVM_IO_INTR) { - JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", 0); - return 0; - } setInetAddress_addr(env, addressObj, ntohl(remote_addr.sin_addr.s_addr)); setInetAddress_family(env, addressObj, IPv4); /* return port */ return ntohs(remote_addr.sin_port); --- 893,906 ---- retry = TRUE; } } } while (retry); ! if (n == SOCKET_ERROR && WSAGetLastError() != WSAEMSGSIZE) { NET_ThrowCurrent(env, "Datagram peek failed"); return 0; } setInetAddress_addr(env, addressObj, ntohl(remote_addr.sin_addr.s_addr)); setInetAddress_family(env, addressObj, IPv4); /* return port */ return ntohs(remote_addr.sin_port);
*** 1033,1047 **** * for this call to peek() */ if (ret <= 0) { if (ret == 0) { JNU_ThrowByName(env,JNU_JAVANETPKG "SocketTimeoutException", "Peek timed out"); ! } else if (ret == JVM_IO_ERR) { NET_ThrowCurrent(env, "timeout in datagram socket peek"); - } else if (ret == JVM_IO_INTR) { - JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", - "operation interrupted"); } if (packetBufferLen > MAX_BUFFER_LEN) { free(fullPacket); } return -1; --- 1019,1030 ---- * for this call to peek() */ if (ret <= 0) { if (ret == 0) { JNU_ThrowByName(env,JNU_JAVANETPKG "SocketTimeoutException", "Peek timed out"); ! } else if (ret == -1) { NET_ThrowCurrent(env, "timeout in datagram socket peek"); } if (packetBufferLen > MAX_BUFFER_LEN) { free(fullPacket); } return -1;
*** 1057,1072 **** ret = NET_Timeout (fduse, timeout); if (ret <= 0) { if (ret == 0) { JNU_ThrowByName(env,JNU_JAVANETPKG "SocketTimeoutException", "Receive timed out"); ! } else if (ret == JVM_IO_ERR) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); - } else if (ret == JVM_IO_INTR) { - JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", - "operation interrupted"); } if (packetBufferLen > MAX_BUFFER_LEN) { free(fullPacket); } return -1; --- 1040,1052 ---- ret = NET_Timeout (fduse, timeout); if (ret <= 0) { if (ret == 0) { JNU_ThrowByName(env,JNU_JAVANETPKG "SocketTimeoutException", "Receive timed out"); ! } else if (ret == -1) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } if (packetBufferLen > MAX_BUFFER_LEN) { free(fullPacket); } return -1;
*** 1075,1085 **** /* receive the packet */ n = recvfrom(fduse, fullPacket, packetBufferLen, MSG_PEEK, (struct sockaddr *)&remote_addr, &remote_addrsize); port = (int) ntohs ((u_short) GET_PORT((SOCKETADDRESS *)&remote_addr)); ! if (n == JVM_IO_ERR) { if (WSAGetLastError() == WSAECONNRESET) { jboolean connected; /* * An icmp port unreachable - we must receive this as Windows --- 1055,1065 ---- /* receive the packet */ n = recvfrom(fduse, fullPacket, packetBufferLen, MSG_PEEK, (struct sockaddr *)&remote_addr, &remote_addrsize); port = (int) ntohs ((u_short) GET_PORT((SOCKETADDRESS *)&remote_addr)); ! if (n == SOCKET_ERROR) { if (WSAGetLastError() == WSAECONNRESET) { jboolean connected; /* * An icmp port unreachable - we must receive this as Windows
*** 1242,1257 **** fduse = checkLastFD (env, this, fd, fd1); } else if (ret <= 0) { if (ret == 0) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", "Receive timed out"); ! } else if (ret == JVM_IO_ERR) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); - } else if (ret == JVM_IO_INTR) { - JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", - "operation interrupted"); } return; } } } else if (!ipv6_supported) { --- 1222,1234 ---- fduse = checkLastFD (env, this, fd, fd1); } else if (ret <= 0) { if (ret == 0) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", "Receive timed out"); ! } else if (ret == -1) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } return; } } } else if (!ipv6_supported) {
*** 1322,1337 **** ret = NET_Timeout(fduse, timeout); if (ret <= 0) { if (ret == 0) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", "Receive timed out"); ! } else if (ret == JVM_IO_ERR) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); - } else if (ret == JVM_IO_INTR) { - JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", - "operation interrupted"); } if (packetBufferLen > MAX_BUFFER_LEN) { free(fullPacket); } return; --- 1299,1311 ---- ret = NET_Timeout(fduse, timeout); if (ret <= 0) { if (ret == 0) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", "Receive timed out"); ! } else if (ret == -1) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } if (packetBufferLen > MAX_BUFFER_LEN) { free(fullPacket); } return;
*** 1346,1356 **** /* receive the packet */ n = recvfrom(fduse, fullPacket, packetBufferLen, 0, (struct sockaddr *)&remote_addr, &remote_addrsize); ! if (n == JVM_IO_ERR) { if (WSAGetLastError() == WSAECONNRESET) { /* * An icmp port unreachable has been received - consume any other * outstanding packets. */ --- 1320,1330 ---- /* receive the packet */ n = recvfrom(fduse, fullPacket, packetBufferLen, 0, (struct sockaddr *)&remote_addr, &remote_addrsize); ! if (n == SOCKET_ERROR) { if (WSAGetLastError() == WSAECONNRESET) { /* * An icmp port unreachable has been received - consume any other * outstanding packets. */
*** 1390,1405 **** if (ret <= 0) { if (ret == 0) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", "Receive timed out"); ! } else if (ret == JVM_IO_ERR) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); - } else if (ret == JVM_IO_INTR) { - JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", - "operation interrupted"); } if (packetBufferLen > MAX_BUFFER_LEN) { free(fullPacket); } return; --- 1364,1376 ---- if (ret <= 0) { if (ret == 0) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", "Receive timed out"); ! } else if (ret == -1) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } if (packetBufferLen > MAX_BUFFER_LEN) { free(fullPacket); } return;
*** 1498,1508 **** JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); return; } else { fd = (int) socket (AF_INET, SOCK_DGRAM, 0); } ! if (fd == JVM_IO_ERR) { NET_ThrowCurrent(env, "Socket creation failed"); return; } SetHandleInformation((HANDLE)(UINT_PTR)fd, HANDLE_FLAG_INHERIT, FALSE); (*env)->SetIntField(env, fdObj, IO_fd_fdID, fd); --- 1469,1479 ---- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); return; } else { fd = (int) socket (AF_INET, SOCK_DGRAM, 0); } ! if (fd == SOCKET_ERROR) { NET_ThrowCurrent(env, "Socket creation failed"); return; } SetHandleInformation((HANDLE)(UINT_PTR)fd, HANDLE_FLAG_INHERIT, FALSE); (*env)->SetIntField(env, fdObj, IO_fd_fdID, fd);
*** 1516,1526 **** */ t = FALSE; WSAIoctl(fd,SIO_UDP_CONNRESET,&t,sizeof(t),&x1,sizeof(x1),&x2,0,0); t = TRUE; fd1 = socket (AF_INET6, SOCK_DGRAM, 0); ! if (fd1 == JVM_IO_ERR) { NET_ThrowCurrent(env, "Socket creation failed"); return; } NET_SetSockOpt(fd1, SOL_SOCKET, SO_BROADCAST, (char*)&t, sizeof(BOOL)); t = FALSE; --- 1487,1497 ---- */ t = FALSE; WSAIoctl(fd,SIO_UDP_CONNRESET,&t,sizeof(t),&x1,sizeof(x1),&x2,0,0); t = TRUE; fd1 = socket (AF_INET6, SOCK_DGRAM, 0); ! if (fd1 == SOCKET_ERROR) { NET_ThrowCurrent(env, "Socket creation failed"); return; } NET_SetSockOpt(fd1, SOL_SOCKET, SO_BROADCAST, (char*)&t, sizeof(BOOL)); t = FALSE;