src/os/windows/vm/os_windows.cpp

Print this page
rev 3227 : 7157695: Add windows implementation of socket interface
Summary: Add imlp using winsock and changing some types.
Reviewed-by:
Contributed-by: nils.eliasson@oracle.com

@@ -4818,103 +4818,94 @@
     return NULL;
   }
   return (struct hostent*)os::WinSock2Dll::gethostbyname(name);
 }
 
-
 int os::socket_close(int fd) {
-  ShouldNotReachHere();
-  return 0;
+  return ::closesocket(fd);
 }
 
 int os::socket_available(int fd, jint *pbytes) {
-  ShouldNotReachHere();
-  return 0;
+  int ret = ::ioctlsocket(fd, FIONREAD, (u_long*)pbytes);
+  return (ret < 0) ? 0 : 1;
 }
 
 int os::socket(int domain, int type, int protocol) {
-  ShouldNotReachHere();
-  return 0;
+  return ::socket(domain, type, protocol);
 }
 
 int os::listen(int fd, int count) {
-  ShouldNotReachHere();
-  return 0;
+  return ::listen(fd, count);
 }
 
-int os::connect(int fd, struct sockaddr* him, socklen_t len) {
-  ShouldNotReachHere();
-  return 0;
+int os::connect(int fd, struct sockaddr* him, int len) {
+  return ::connect(fd, him, len);
 }
 
-int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
-  ShouldNotReachHere();
-  return 0;
+int os::accept(int fd, struct sockaddr* him, int* len) {
+  return ::accept(fd, him, len);
 }
 
-int os::sendto(int fd, char* buf, size_t len, uint flags,
-               struct sockaddr* to, socklen_t tolen) {
-  ShouldNotReachHere();
-  return 0;
+int os::sendto(int fd, char* buf, int len, int flags,
+               struct sockaddr* to, int tolen) {
+  return ::sendto(fd, buf, len, flags, to, tolen);
 }
 
-int os::recvfrom(int fd, char *buf, size_t nBytes, uint flags,
-                 sockaddr* from, socklen_t* fromlen) {
-  ShouldNotReachHere();
-  return 0;
+int os::recvfrom(int fd, char *buf, int nBytes, int flags,
+                 sockaddr* from, int* fromlen) {
+  return ::recvfrom(fd, buf, nBytes, flags, from, fromlen);
 }
 
-int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
-  ShouldNotReachHere();
-  return 0;
+int os::recv(int fd, char* buf, int nBytes, int flags) {
+  return ::recv(fd, buf, nBytes, flags);
 }
 
-int os::send(int fd, char* buf, size_t nBytes, uint flags) {
-  ShouldNotReachHere();
-  return 0;
+int os::send(int fd, char* buf, int nBytes, int flags) {
+  return ::send(fd, buf, nBytes, flags);
 }
 
-int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
-  ShouldNotReachHere();
-  return 0;
+int os::raw_send(int fd, char* buf, int nBytes, int flags) {
+  return ::send(fd, buf, nBytes, flags);
 }
 
 int os::timeout(int fd, long timeout) {
-  ShouldNotReachHere();
-  return 0;
+  fd_set tbl;
+  struct timeval t;
+
+  t.tv_sec  = timeout / 1000;
+  t.tv_usec = (timeout % 1000) * 1000;
+
+  tbl.fd_count    = 1;
+  tbl.fd_array[0] = fd;
+
+  return select(1, &tbl, 0, 0, &t);
 }
 
 int os::get_host_name(char* name, int namelen) {
-  ShouldNotReachHere();
-  return 0;
+  return ::gethostname(name, namelen);
 }
 
 int os::socket_shutdown(int fd, int howto) {
-  ShouldNotReachHere();
-  return 0;
+  return ::shutdown(fd, howto);
 }
 
-int os::bind(int fd, struct sockaddr* him, socklen_t len) {
-  ShouldNotReachHere();
-  return 0;
+int os::bind(int fd, struct sockaddr* him, int len) {
+  return ::bind(fd, him, len);
 }
 
-int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len) {
-  ShouldNotReachHere();
-  return 0;
+int os::get_sock_name(int fd, struct sockaddr* him, int* len) {
+  return ::getsockname(fd, him, len);
 }
 
 int os::get_sock_opt(int fd, int level, int optname,
-                     char* optval, socklen_t* optlen) {
-  ShouldNotReachHere();
-  return 0;
+                     char* optval, int* optlen) {
+  return ::getsockopt(fd, level, optname, optval, optlen);
 }
 
 int os::set_sock_opt(int fd, int level, int optname,
-                     const char* optval, socklen_t optlen) {
-  ShouldNotReachHere();
-  return 0;
+                     const char* optval, int optlen) {
+  return ::setsockopt(fd, level, optname, optval, optlen);
 }
 
 
 // Kernel32 API
 typedef SIZE_T (WINAPI* GetLargePageMinimum_Fn)(void);