3 years, 11 months ago.

TCPSocket in non-blocking mode: how to find out WHY callback method has been called

mbed-os 5.8: TCPSocket supports the non-blocking mode which makes use of a callback function. This function needs to be registered with TCPSocket using method sigio beforehand. Once one out of the following events occur, the method will be called ("The specified callback will be called on state changes such as when the socket can recv/send/accept successfully and on when an error occurs. The callback may also be called spuriously without reason" - taken from the 5.8-docu.). So far ... so good.

Now imagine one of the events has occured and the callback method is being called. How can i find out WHY the method has been called? What was the event causing the callback method call? There is no parameter indicating the event. How can i identify the "call without reason"?

Any ideas?


2 Answers

3 years, 5 months ago.

Hi Matthias,

I am on the same probleme i can't identify the callback reason...

And an other probleme, you cannot do a TCPSocket.recv() without "MbedOS assertion failed" in TCPSocket.sigio() event.

MbedOS assertion failed on TCPSocket.recv() in TCPSocket.sigio() event

++ MbedOS Error Info ++
Error Status: 0x80FF0144 Code: 324 Module: 255
Error Message: Assertion failed: _readers == 0
Location: 0x1165B
File: .\mbed-os\features\netsocket\TCPSocket.cpp+196
Error Value: 0x0
Current Thread: lwip_tcpip  Id: 0x20001B0C Entry: 0x78C9 StackSize: 0x4B0 StackMem: 0x2000F310 SP: 0x2000F5BC
For more info, visit: https://armmbed.github.io/mbedos-error/?error=0x80FF0144
-- MbedOS Error Info --

Some help?

3 years ago.


I am also having same problem. Did this solved in latest MBEDOS releases?


Hi ... to make it short ... i completely switched to STM32CubeMX and System Workbench for STM32 for that project. I did not perform further experiments with mbed-OS. So i don't know how the situation is right now. Matthias.

posted by Matthias Jordan 10 May 2019