Android app crashes in-spite of Try/Catch

Viewed 1280

I am trying to write an app while working with Network Service Discovery(NSD) and i notice that whenever it crashes, the line of error comes from a block of code inside a try/catch.I can't specify a catch for SocketException because i believe (because I tried) that IOException covers that too. How do I proceed?

Here is the code

class ServerThread implements Runnable {

        @Override
        public void run() {

            try {
                mServerSocket = new ServerSocket(0);
                setLocalPort(mServerSocket.getLocalPort());

                while (!Thread.currentThread().isInterrupted()) {
                    Log.d(TAG, "ServerSocket Created, awaiting connection");
                    setSocket(mServerSocket.accept()); //line of error
                    Log.d(TAG, "Connected.");
                    Toast.makeText(context, "Connected", Toast.LENGTH_SHORT).show();
                    if (mChatClient == null) {
                        int port = mSocket.getPort();
                        InetAddress address = mSocket.getInetAddress();
                        connectToServer(address, port);
                    }
                }
            } catch (IOException e) {
                Log.e(TAG, "Error creating ServerSocket: ", e);
                e.printStackTrace();
            }
        }
    }

Here is the full error log

06-02 06:07:43.804 26779-26779/com.example.android.nsdchat E/MultiWindowProxy: getServiceInstance failed!
06-02 06:07:43.829 26779-26786/com.example.android.nsdchat E/art: Failed sending reply to debugger: Broken pipe
06-02 06:07:45.117 26779-26794/com.example.android.nsdchat E/ONS: 1. NsdChat (_http._tcp. -- 0 -- 0)
06-02 06:07:47.132 26779-26796/com.example.android.nsdchat E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f9de01110
06-02 06:07:56.925 26779-26779/com.example.android.nsdchat E/IAE: listener in use
06-02 06:07:59.331 26779-26779/com.example.android.nsdchat E/IAE: listener in use
06-02 06:08:04.004 26779-26794/com.example.android.nsdchat E/NsdHelper: Resolve Succeeded. name: NsdChat, type: ._http._tcp, host: /192.168.82.103, port: 48308
06-02 06:08:05.995 26779-26796/com.example.android.nsdchat E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f9da665c0
06-02 06:08:07.364 26779-26796/com.example.android.nsdchat E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f9da6c990
06-02 06:08:07.716 26779-26793/com.example.android.nsdchat E/ChatConnection: Error creating ServerSocket: 
                                                                         java.net.SocketException: Socket closed
                                                                             at libcore.io.Posix.accept(Native Method)
                                                                             at libcore.io.BlockGuardOs.accept(BlockGuardOs.java:63)
                                                                             at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:94)
                                                                             at java.net.ServerSocket.implAccept(ServerSocket.java:217)
                                                                             at java.net.ServerSocket.accept(ServerSocket.java:141)
                                                                             at com.example.android.nsdchat.ChatConnection$ChatServer$ServerThread.run(ChatConnection.java:153)
                                                                             at java.lang.Thread.run(Thread.java:818)
06-02 06:08:07.997 26779-26796/com.example.android.nsdchat E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f9dcd2bd0
1 Answers

Fixed it! Turns out the line of error setSocket(mServerSocket.accept()); needed to close a socket that was null at that point.

Related