wsServer icon indicating copy to clipboard operation
wsServer copied to clipboard

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

Open grm1209 opened this issue 8 months ago • 4 comments

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:

  • wsServer version (commit hash)
  • OS version: Debian GNU/Linux 12 (bookworm)
    • If Linux:
      • kernel version: 6.1.0-15-amd64
      • Libc used: Debian GLIBC 2.36-9+deb12u3
  • Architecture: x86-64...

grm1209 avatar Dec 12 '23 18:12 grm1209

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 avatar Dec 14 '23 02:12 Theldus

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

Theldus avatar Dec 14 '23 03:12 Theldus

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

Vaibhav-singh78 avatar Mar 17 '24 12:03 Vaibhav-singh78

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.

Theldus avatar Mar 18 '24 00:03 Theldus