java - Got "Unrecognized Windows Sockets error: 0: recv failed" while posting message -


i'm trying post http post via httpclient server client authentication enabled. here code

public class send2remote {  private static string sslmode = null; private static string clientkeystore = null; private static string clientstoretype = null; private static string clientstorepw = null;  private static string trustkeystore = null; private static string truststoretype = null; private static string truststorepw = null;  public send2remote(string sslmode, string clientks, string clientst, string clienttpw,          string trustks, string trustst, string trustspw) {     sslmode = sslmode;     clientkeystore = clientks;     clientstoretype = clientst;     clientstorepw = clienttpw;      trustkeystore = trustks;     truststoretype = trustst;     truststorepw = trustspw; }  private final class x509hostnameverifierimplementation implements x509hostnameverifier {     @override     public void verify(string host, sslsocket ssl) throws ioexception {     }      @override     public void verify(string host, x509certificate cert) throws sslexception {     }      @override     public void verify(string host, string[] cns, string[] subjectalts) throws sslexception {     }      @override     public boolean verify(string s, sslsession sslsession) {         return true;     } }  public string post(string url, list<namevaluepair> formparams) {             sslcontext sslcontext = null;     keymanagerfactory kmf = null;     trustmanagerfactory tmf = null;     keystore ks = null;     keystore tks = null;     try {                    sslcontext = sslcontext.getinstance(sslmode);         kmf = keymanagerfactory.getinstance(keymanagerfactory.getdefaultalgorithm());         tmf = trustmanagerfactory.getinstance(keymanagerfactory.getdefaultalgorithm());          ks = keystore.getinstance(clientstoretype);         tks = keystore.getinstance(truststoretype);          ks.load(new fileinputstream(clientkeystore), clientstorepw.tochararray());         tks.load(new fileinputstream(trustkeystore), truststorepw.tochararray());          kmf.init(ks, clientstorepw.tochararray());         tmf.init(tks);          sslcontext.init(kmf.getkeymanagers(), tmf.gettrustmanagers(), null);      } catch (nosuchalgorithmexception | certificateexception | ioexception | keystoreexception | unrecoverablekeyexception | keymanagementexception e1) {         log4j.log.error("error occurred: " + e1.getclass() + ":" + e1.getmessage() + ", full stacktrace: " + new gson().tojson(e1.getstacktrace()));         return null;     }      sslconnectionsocketfactory sslsf = new sslconnectionsocketfactory(             sslcontext, new x509hostnameverifierimplementation());      registry<connectionsocketfactory> socketfactoryregistry = registrybuilder             .<connectionsocketfactory> create().register("https", sslsf)             .build();      poolinghttpclientconnectionmanager cm = new poolinghttpclientconnectionmanager(             socketfactoryregistry);     closeablehttpclient httpclient = httpclients.custom()             .setconnectionmanager(cm).build();      httppost httppost = new httppost(url);      urlencodedformentity uefentity;     string returncode = null;     try {         uefentity = new urlencodedformentity(formparams, "utf-8");         httppost.setentity(uefentity);          closeablehttpresponse response = httpclient.execute(httppost);         try {             httpentity entity = response.getentity();             if (entity != null) {                 returncode = entityutils.tostring(entity, "utf-8");             }         } {             response.close();         }     } catch (clientprotocolexception e) {         log4j.log.error("error occurred: " + e.getclass() + ":" + e.getmessage() + ", full stacktrace: " + new gson().tojson(e.getstacktrace()));         return null;     } catch (unsupportedencodingexception e1) {         log4j.log.error("error occurred: " + e1.getclass() + ":" + e1.getmessage() + ", full stacktrace: " + new gson().tojson(e1.getstacktrace()));         return null;     } catch (ioexception e) {         log4j.log.error("error occurred: " + e.getclass() + ":" + e.getmessage() + ", full stacktrace: " + new gson().tojson(e.getstacktrace()));         return null;     } {         try {             httpclient.close();         } catch (ioexception e) {             e.printstacktrace();         } {             close(httpclient);         }     }     return returncode; }  public void close(closeable io) {     if (io != null) {         try {             io.close();         } catch (ioexception ignore) {         }     } }  }  

when execute own keystores, got exception while posting message

class javax.net.ssl.sslhandshakeexception:java.net.socketexception: unrecognized windows sockets error: 0: recv failed 

and server admin gave me part of log

[2017/8/21   20:10:16:477 cst] 000000f7 systemout     o webcontainer : 20, write: tlsv1.2 handshake, length = 96 [2017/8/21   20:10:16:477 cst] 000000f7 systemout     o webcontainer : 20, waiting close_notify or alert: state 1 [2017/8/21   20:10:16:477 cst] 000000f7 systemout     o webcontainer : 20, exception while waiting close java.net.socketexception: unrecognized windows sockets error: 0: recv failed [2017/8/21   20:10:16:477 cst] 000000f7 systemout     o %% invalidated:  [session-18, ssl_ecdhe_rsa_with_aes_256_cbc_sha384] [2017/8/21   20:10:16:477 cst] 000000f7 systemout     o webcontainer : 20, send tlsv1.2 alert:  fatal, description = handshake_failure [2017/8/21   20:10:16:477 cst] 000000f7 systemout     o webcontainer : 20, write: tlsv1.2 alert, length = 80 [2017/8/20   20:10:16:477 cst] 000000f7 systemout     o webcontainer : 20, exception sending alert: java.net.socketexception: unrecognized windows sockets error: 0: socket write error [2017/8/20   20:10:16:477 cst] 000000f7 systemout     o webcontainer : 20, called closesocket() [2017/8/20   20:10:16:477 cst] 000000f7 systemout     o webcontainer : 20, handling exception: javax.net.ssl.sslhandshakeexception: java.net.socketexception: unrecognized windows sockets error: 0: recv failed 

server , added each other's certificate own trust keystore, should not issue of trusting each other. can't find other thread solve issue too.

possibly can cause issue:

server has both ipv4 , ipv6 enabled?

cause:

the java virtual machine (jvm) can have problems opening or closing sockets @ operating system level when both ipv4 , ipv6 enabled on windows server.

probable fix:

jvm need run on ipv4, if possible. add set following jvm option:
-djava.net.preferipv4stack=true


Comments

Popular posts from this blog

python - Operations inside variables -

Generic Map Parameter java -

arrays - What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? -