Rapsssito / react-native-tcp-socket

React Native TCP socket API for Android, iOS & macOS with SSL/TLS support.
MIT License
319 stars 81 forks source link

Unhandled error event #69

Closed kelcon closed 4 years ago

kelcon commented 4 years ago

Description

I receive global unhandled error event causing app to crash.

Steps to reproduce

Steps to reproduce the behavior:

I am not able to reproduce. It is quite random.

Code:

  let server = TcpSocket.createServer( async function(socket) {

    socket.on('error', (err) => {
      console.warn('socket error: '+err);
      try {
        socket.destroy();
      } catch (err) {
        console.warn('Socket destroy error (on socket error): '+err);
      }
    });

    socket.on('data', async (data) => {  });

    socket.on('close', (err) => {      
      console.warn('socket closed: '+err);
    });

});

server.listen(serverOptions, () => {});

  // restart server in case of app going back to foreground
  AppState.addEventListener("change", async (state) => {
    if (state == 'active' && disabled == false) {

      if (typeof server !== 'undefined') {
         console.warn('State changed to active. Server respawned');
         try {
            server.close();
         } catch (err) {
          console.warn('Server close error on state change: '+err);
         }
         try {
            server = await createTcpServer(storage, serverOptions);
         } catch(err) {
            console.warn('Server creation error on state change: '+err);
         }

      }

    }
  })

Current behavior

A clear and concise description of what happened.

{
  "message": "Error: Unhandled error. (undefined)",
  "stack": [
    {
      "functionName": "emit",
      "lineNumber": 141,
      "columnNumber": 14,
      "fileName": "node_modules/events/events.js"
    },
    {
      "functionName": "_eventEmitter.addListener$argument_1",
      "lineNumber": 62,
      "columnNumber": 12,
      "fileName": "node_modules/react-native-tcp-socket/src/TcpSocket.js"
    },
    {
      "functionName": "emit",
      "lineNumber": 189,
      "columnNumber": 10,
      "fileName": "node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js"
    },
    {
      "functionName": "__callFunction",
      "lineNumber": 425,
      "columnNumber": 19,
      "fileName": "node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js"
    },
    {
      "functionName": "__guard$argument_0",
      "lineNumber": 112,
      "columnNumber": 6,
      "fileName": "node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js"
    },
    {
      "functionName": "__guard",
      "lineNumber": 373,
      "columnNumber": 10,
      "fileName": "node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js"
    },
    {
      "functionName": "callFunctionReturnFlushedQueue",
      "lineNumber": 111,
      "columnNumber": 4,
      "fileName": "node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js"
    },
    {
      "functionName": "callFunctionReturnFlushedQueue",
      "lineNumber": null,
      "columnNumber": null,
      "fileName": "[native code]"
    }
  ]
}

Expected behavior

Not to crash

Relevant information

OS 13.3
react-native 0.62.2
react-native-tcp-socket 4.2.0
Rapsssito commented 4 years ago

@kelcon, do you have any more information? When does this error occur? What line is causing the error?

kelcon commented 4 years ago

I assume, that it might be a my fault related to not having 'error' listener attached to the server (not socket)

Rapsssito commented 4 years ago

@kelcon, if you add an error listener, do you get any more information?

github-actions[bot] commented 4 years ago

Hey there, it looks like there has been no activity on this issue recently. Has the issue been fixed, or does it still require the community attention? This issue may be closed if no further activity occurs.

mi-mazouz commented 3 years ago

Same issue, adding error event does not provide more information...

Rapsssito commented 3 years ago

@mi-mazouz, did you add the error listener to both sockets?

DarshanPatel64 commented 3 years ago

this works fine for me.. ✌✌✌😃😃

startServer = () => {
    const server = TcpSocket.createServer(function(socket) {
      socket.on('data', function(data){
        socket.write("Client Connected");
      });
      socket.on('error', (error) => {
        console.log('error: ', error);
      });

      socket.on('close', () => {
        console.log('connection closed ', socket.address());
      });
    }).listen({ port: 12345});

    server.on('error', (error) => {
      console.log('An error ocurred with the server', error);
    });

    server.on('close', () => {
      console.log('Server closed connection');
    });

    this.setState({
      myServer:server
    });
  }

  startClient = () => {
    const client = TcpSocket.createConnection({
        port: 12345, 
        host: this.state.ip, 
        interface: 'wifi'  
    }, () => {
      client.write("connected to server ");
    });

    client.on('data', function(data) {
      console.log('message was received', data);
    });

    client.on('error', function(error) {
      console.log(error);
    });

    client.on('close', function(){
      console.log('Connection closed!');
    });

    this.setState({
      myClient:client
    });
  }