Hi,
To establish more connections using BSD sockets, I need to determine the best approach.
1)Should I implement multiple threads for this purpose? For example, I could use a threading model similar to the following:
https://www.keil.com/pack/doc/mw6/Network/html/group__bsd__routines.html#ga7005ffbeeff92be5394ff3244da79028
2) Alternatively, should I create a server thread and utilize the listen function with a backlog argument greater than 1? If that’s the case, I would need to manage incoming connections using the accept function to ensure they are handled.
listen
accept
3) As I see the Network debug window details, there is a bsd_cb_tcp callback function, but there is no information on how to implement or use it, Is there any resource?
4)How can I get the BSD socket states, such as Established, Connected, or others?"
5)Is there a function to determine the amount of available memory
1+2) Sorry, don't know what fits best in your application purpose. So I also can't give a recommendation.
3) As the BSD socket implementation uses the network libraries own native TCP and UDP sockets, they internally also use the callbacks to maintain BSD socket operation. You do not need to deal with it.
4) Not sure how perfect this works, be maybe you can poll a socket with non-blocking recv() calls and check the returned state. Or, maybe getpeername() might help. If it returns a valid peer, the socket should still be up.
5) Not sure what memory you mean.
Thank you, Andreas Barth, for your comment.
1,2) I need to establish five BSD connections between different devices and an STM32 MCU. Therefore, I need to listen on a specific port for each connection. When I was using TCP sockets, I utilized different socket objects, but with BSD connections, I need guidance on how to proceed.
3) Does this mean that I should create a new thread for each connection to manage all incoming connections as mentioned in this link?
Page:
https://community.arm.com/support-forums/f/keil-forum/56303/an-interruption-occurs-in-all-tcp-socket-connections-when-a-socket-connection-is-disrupted-either-by-disconnecting-the-ethernet-cable-or-by-powering-off-the-device
1+2+3) This is really something you need decide for yourself and what fits best your application needs. The BSD socket implementation is thread-safe for the most relevant part. As things can be used in non-blocking mode, it could work in a single thread and polling all sockets, or multi-threaded, using blocking calls on each socket.
5) And as the BSD sockets use the native TCP and UDP sockets underneath, the same memory management is used in this regard.