Question

I tried to make an Android Server with an SSLServerSocket. I made a keystore and started to make the server. I initialize the server as follows:

        String keyStoreType = KeyStore.getDefaultType();
        KeyStore keyStore = KeyStore.getInstance(keyStoreType);
        InputStream inputStream = context.getResources().openRawResource(R.raw.server);
        keyStore.load(inputStream, "passwd".toCharArray());

        String keyalg = KeyManagerFactory.getDefaultAlgorithm();
        kmf.init(keyStore, "passwd".toCharArray());

        KeyManagerFactory kmf = KeyManagerFactory.getInstance(keyalg);
        SSLContext context = SSLContext.getInstance("TLS");
        context.init(kmf.getKeyManagers(), null, null);
        SSLServerSocket ss = (SSLServerSocket) context.getServerSocketFactory().createServerSocket();
        inputStream.close();

        //Here comes the error
        ss.accept();

So if I try to accept clients (without that the client side tried to connect), I get an error.

        java.net.SocketException: accept failed: EINVAL (Invalid argument)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:110)
        at java.net.ServerSocket.implAccept(ServerSocket.java:203)
        at  com.android.org.conscrypt.OpenSSLServerSocketImpl.accept(OpenSSLServerSocketImpl.java:184)
        at de.turtc.util.ServerUtil.run(ServerUtil.java:88)

        Caused by: libcore.io.ErrnoException: accept failed: EINVAL (Invalid argument)
        at libcore.io.Posix.accept(Native Method)
        at libcore.io.BlockGuardOs.accept(BlockGuardOs.java:55)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:98)

Without a SSLServerSocket it works! I dont get any information of this error!

Was it helpful?

Solution

Problem was: I didn't give a port to the server.

    String keyStoreType = KeyStore.getDefaultType();
    KeyStore keyStore = KeyStore.getInstance(keyStoreType);
    InputStream inputStream = context.getResources().openRawResource(R.raw.server);
    keyStore.load(inputStream, "passwd".toCharArray());

    String keyalg = KeyManagerFactory.getDefaultAlgorithm();
    kmf.init(keyStore, "passwd".toCharArray());

    KeyManagerFactory kmf = KeyManagerFactory.getInstance(keyalg);
    SSLContext context = SSLContext.getInstance("TLS");
    context.init(kmf.getKeyManagers(), null, null);
    SSLServerSocket ss = (SSLServerSocket) context.getServerSocketFactory().createServerSocket(4444);
    inputStream.close();

    ss.accept();

So I changed:

SSLServerSocket ss = (SSLServerSocket)  context.getServerSocketFactory().createServerSocket();

to

SSLServerSocket ss = (SSLServerSocket)context.getServerSocketFactory().createServerSocket(4444);

That solved my problem!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top