Theldus / wsServer

wsServer - a tiny WebSocket server library written in C
https://theldus.github.io/wsServer
GNU General Public License v3.0
427 stars 82 forks source link

Problem with recent change to the calling sequence for the function 'ws_socket() #86

Open grm1209 opened 10 months ago

grm1209 commented 10 months ago

The recent change to the calling sequence for the function 'ws_socket(struct ws_server *ws_srv)' causes problems if the 'ws_server' structure is in the stack of the calling function and the function exits after calling a non-blocking 'ws_socket()'.

Previously, the callers 'ws_events' structure was copied the wsServer's 'ws_server' structure. Now, the caller's pointer to it's 'ws_server' structure is placed in the wsServer's 'ws_accept_params' structure.

When the calling function exits, it's 'ws_server' structure becomes undefined. The solution for the caller is to allocate the 'ws_server' structure in local space.

A note of this should be included in the documentation. And maybe the examples like 'echo' should do this instead of using stack allocation.

My environment:

Theldus commented 10 months ago

Hi @grm1209, Yes, you are correct that the structure pointer is passed to 'ws_accept_params' but the 'ws_server' structure is indeed copied into memory as soon as the thread handling the connection is created.

What must be happening in your case is that the function returns even before this thread is created, and thus the structure is no longer valid. This is a bug and needs to be fixed.

I will address it as soon as possible. Thank you for bringing it to my attention.

Theldus commented 10 months ago

@grm1209 could you confirm if commit 24e6fae fixes your problem?

Vaibhav-singh78 commented 7 months ago

library has problem with socket accepting connection , can you help i am stuck here for two days

Theldus commented 7 months ago

Hi @Vaibhav-singh78, Is your issue related to this one? if not, it would be much better to create a new issue...

Anyway, could you provide more details? your operating system? code used etc? An 'MRE' (Minimal, Reproducible Example) would be very useful to better understand your problem.