--- a/hotspot/src/os/linux/vm/os_linux.cpp Thu Dec 16 12:56:51 2010 -0800
+++ b/hotspot/src/os/linux/vm/os_linux.cpp Thu Dec 16 20:57:03 2010 -0500
@@ -115,6 +115,7 @@
# include <link.h>
# include <stdint.h>
# include <inttypes.h>
+# include <sys/ioctl.h>
#define MAX_PATH (2 * K)
@@ -4433,6 +4434,15 @@
return 1;
}
+int os::socket_available(int fd, jint *pbytes) {
+ // Linux doc says EINTR not returned, unlike Solaris
+ int ret = ::ioctl(fd, FIONREAD, pbytes);
+
+ //%% note ioctl can return 0 when successful, JVM_SocketAvailable
+ // is expected to return 0 on failure and 1 on success to the jdk.
+ return (ret < 0) ? 0 : 1;
+}
+
// Map a block of memory.
char* os::map_memory(int fd, const char* file_name, size_t file_offset,
char *addr, size_t bytes, bool read_only,