src/os/windows/vm/os_windows.cpp

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


4803 
4804   ::mutexInit(&sockFnTableMutex);
4805   ::mutexLock(&sockFnTableMutex);
4806   if (os::WinSock2Dll::WSAStartup(MAKEWORD(1,1), &wsadata) != 0) {
4807       jio_fprintf(stderr, "Could not initialize Winsock\n");
4808   }
4809   sock_initialized = TRUE;
4810   ::mutexUnlock(&sockFnTableMutex);
4811 }
4812 
4813 struct hostent* os::get_host_by_name(char* name) {
4814   if (!sock_initialized) {
4815     initSock();
4816   }
4817   if (!os::WinSock2Dll::WinSock2Available()) {
4818     return NULL;
4819   }
4820   return (struct hostent*)os::WinSock2Dll::gethostbyname(name);
4821 }
4822 
4823 
4824 int os::socket_close(int fd) {
4825   ShouldNotReachHere();
4826   return 0;
4827 }
4828 
4829 int os::socket_available(int fd, jint *pbytes) {
4830   ShouldNotReachHere();
4831   return 0;

4832 }
4833 
4834 int os::socket(int domain, int type, int protocol) {
4835   ShouldNotReachHere();
4836   return 0;
4837 }
4838 
4839 int os::listen(int fd, int count) {
4840   ShouldNotReachHere();
4841   return 0;
4842 }
4843 
4844 int os::connect(int fd, struct sockaddr* him, socklen_t len) {
4845   ShouldNotReachHere();
4846   return 0;
4847 }
4848 
4849 int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
4850   ShouldNotReachHere();
4851   return 0;
4852 }
4853 
4854 int os::sendto(int fd, char* buf, size_t len, uint flags,
4855                struct sockaddr* to, socklen_t tolen) {
4856   ShouldNotReachHere();
4857   return 0;
4858 }
4859 
4860 int os::recvfrom(int fd, char *buf, size_t nBytes, uint flags,
4861                  sockaddr* from, socklen_t* fromlen) {
4862   ShouldNotReachHere();
4863   return 0;
4864 }
4865 
4866 int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
4867   ShouldNotReachHere();
4868   return 0;
4869 }
4870 
4871 int os::send(int fd, char* buf, size_t nBytes, uint flags) {
4872   ShouldNotReachHere();
4873   return 0;
4874 }
4875 
4876 int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
4877   ShouldNotReachHere();
4878   return 0;
4879 }
4880 
4881 int os::timeout(int fd, long timeout) {
4882   ShouldNotReachHere();
4883   return 0;








4884 }
4885 
4886 int os::get_host_name(char* name, int namelen) {
4887   ShouldNotReachHere();
4888   return 0;
4889 }
4890 
4891 int os::socket_shutdown(int fd, int howto) {
4892   ShouldNotReachHere();
4893   return 0;
4894 }
4895 
4896 int os::bind(int fd, struct sockaddr* him, socklen_t len) {
4897   ShouldNotReachHere();
4898   return 0;
4899 }
4900 
4901 int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len) {
4902   ShouldNotReachHere();
4903   return 0;
4904 }
4905 
4906 int os::get_sock_opt(int fd, int level, int optname,
4907                      char* optval, socklen_t* optlen) {
4908   ShouldNotReachHere();
4909   return 0;
4910 }
4911 
4912 int os::set_sock_opt(int fd, int level, int optname,
4913                      const char* optval, socklen_t optlen) {
4914   ShouldNotReachHere();
4915   return 0;
4916 }
4917 
4918 
4919 // Kernel32 API
4920 typedef SIZE_T (WINAPI* GetLargePageMinimum_Fn)(void);
4921 typedef LPVOID (WINAPI *VirtualAllocExNuma_Fn) (HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD);
4922 typedef BOOL (WINAPI *GetNumaHighestNodeNumber_Fn) (PULONG);
4923 typedef BOOL (WINAPI *GetNumaNodeProcessorMask_Fn) (UCHAR, PULONGLONG);
4924 
4925 GetLargePageMinimum_Fn      os::Kernel32Dll::_GetLargePageMinimum = NULL;
4926 VirtualAllocExNuma_Fn       os::Kernel32Dll::_VirtualAllocExNuma = NULL;
4927 GetNumaHighestNodeNumber_Fn os::Kernel32Dll::_GetNumaHighestNodeNumber = NULL;
4928 GetNumaNodeProcessorMask_Fn os::Kernel32Dll::_GetNumaNodeProcessorMask = NULL;
4929 BOOL                        os::Kernel32Dll::initialized = FALSE;
4930 SIZE_T os::Kernel32Dll::GetLargePageMinimum() {
4931   assert(initialized && _GetLargePageMinimum != NULL,
4932     "GetLargePageMinimumAvailable() not yet called");
4933   return _GetLargePageMinimum();
4934 }
4935 




4803 
4804   ::mutexInit(&sockFnTableMutex);
4805   ::mutexLock(&sockFnTableMutex);
4806   if (os::WinSock2Dll::WSAStartup(MAKEWORD(1,1), &wsadata) != 0) {
4807       jio_fprintf(stderr, "Could not initialize Winsock\n");
4808   }
4809   sock_initialized = TRUE;
4810   ::mutexUnlock(&sockFnTableMutex);
4811 }
4812 
4813 struct hostent* os::get_host_by_name(char* name) {
4814   if (!sock_initialized) {
4815     initSock();
4816   }
4817   if (!os::WinSock2Dll::WinSock2Available()) {
4818     return NULL;
4819   }
4820   return (struct hostent*)os::WinSock2Dll::gethostbyname(name);
4821 }
4822 

4823 int os::socket_close(int fd) {
4824   return ::closesocket(fd);

4825 }
4826 
4827 int os::socket_available(int fd, jint *pbytes) {
4828   u_long lbytes = (u_long)(*pbytes);
4829   int ret = ::ioctlsocket(fd, FIONREAD, &lbytes);
4830   return (ret < 0) ? 0 : 1;
4831 }
4832 
4833 int os::socket(int domain, int type, int protocol) {
4834   return ::socket(domain, type, protocol);

4835 }
4836 
4837 int os::listen(int fd, int count) {
4838   return ::listen(fd, count);

4839 }
4840 
4841 int os::connect(int fd, struct sockaddr* him, socklen_t len) {
4842   return ::connect(fd, him, len);

4843 }
4844 
4845 int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
4846   return ::accept(fd, him, len);

4847 }
4848 
4849 int os::sendto(int fd, char* buf, size_t len, uint flags,
4850                struct sockaddr* to, socklen_t tolen) {
4851 
4852   return ::sendto(fd, buf, (int)len, flags, to, tolen);
4853 }
4854 
4855 int os::recvfrom(int fd, char *buf, size_t nBytes, uint flags,
4856                  sockaddr* from, socklen_t* fromlen) {
4857 
4858   return ::recvfrom(fd, buf, (int)nBytes, flags, from, fromlen);
4859 }
4860 
4861 int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
4862   return ::recv(fd, buf, (int)nBytes, flags);

4863 }
4864 
4865 int os::send(int fd, char* buf, size_t nBytes, uint flags) {
4866   return ::send(fd, buf, (int)nBytes, flags);

4867 }
4868 
4869 int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
4870   return ::send(fd, buf, (int)nBytes, flags);

4871 }
4872 
4873 int os::timeout(int fd, long timeout) {
4874   fd_set tbl;
4875   struct timeval t;
4876 
4877   t.tv_sec  = timeout / 1000;
4878   t.tv_usec = (timeout % 1000) * 1000;
4879 
4880   tbl.fd_count    = 1;
4881   tbl.fd_array[0] = fd;
4882 
4883   return ::select(1, &tbl, 0, 0, &t);
4884 }
4885 
4886 int os::get_host_name(char* name, int namelen) {
4887   return ::gethostname(name, namelen);

4888 }
4889 
4890 int os::socket_shutdown(int fd, int howto) {
4891   return ::shutdown(fd, howto);

4892 }
4893 
4894 int os::bind(int fd, struct sockaddr* him, socklen_t len) {
4895   return ::bind(fd, him, len);

4896 }
4897 
4898 int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len) {
4899   return ::getsockname(fd, him, len);

4900 }
4901 
4902 int os::get_sock_opt(int fd, int level, int optname,
4903                      char* optval, socklen_t* optlen) {
4904   return ::getsockopt(fd, level, optname, optval, optlen);

4905 }
4906 
4907 int os::set_sock_opt(int fd, int level, int optname,
4908                      const char* optval, socklen_t optlen) {
4909   return ::setsockopt(fd, level, optname, optval, optlen);

4910 }
4911 
4912 
4913 // Kernel32 API
4914 typedef SIZE_T (WINAPI* GetLargePageMinimum_Fn)(void);
4915 typedef LPVOID (WINAPI *VirtualAllocExNuma_Fn) (HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD);
4916 typedef BOOL (WINAPI *GetNumaHighestNodeNumber_Fn) (PULONG);
4917 typedef BOOL (WINAPI *GetNumaNodeProcessorMask_Fn) (UCHAR, PULONGLONG);
4918 
4919 GetLargePageMinimum_Fn      os::Kernel32Dll::_GetLargePageMinimum = NULL;
4920 VirtualAllocExNuma_Fn       os::Kernel32Dll::_VirtualAllocExNuma = NULL;
4921 GetNumaHighestNodeNumber_Fn os::Kernel32Dll::_GetNumaHighestNodeNumber = NULL;
4922 GetNumaNodeProcessorMask_Fn os::Kernel32Dll::_GetNumaNodeProcessorMask = NULL;
4923 BOOL                        os::Kernel32Dll::initialized = FALSE;
4924 SIZE_T os::Kernel32Dll::GetLargePageMinimum() {
4925   assert(initialized && _GetLargePageMinimum != NULL,
4926     "GetLargePageMinimumAvailable() not yet called");
4927   return _GetLargePageMinimum();
4928 }
4929