>
> Hi.

 

> I have a similar task - process incoming connections in different thread. 
> And I don't have fixed set of working threads, they are started on demand 
> and depending on settings which can, in particular, say to start new thread 
> for each incoming connection.

 

> Creation and processing of pipe just to transfer socket inside one process 
> is not trivial task. Sorry, but it looks rather ... over-engineered, to use 
> this IPC method for inter-thread communication when without libuv the task 
> is very simple - just pass accepted FD to new thread. Especially when there 
> are many independent listening sockets (each can listen in different 
> loop/thread). And also using a pipe makes accepting new connection rather 
> long-timed task because requires several loop iterations.


 My idea is to accept connections in one thread / loop (same as listening) 
and then dup() accepted socket, close original accepted socket, pass dup'ed 
socket to new thread / loop. On Unix this looks like:

uv_tcp_t *client_sock=new uv_tcp_t;  //must not be local to be correctly 
closed

uv_tcp_init(server->loop, client_sock);

uv_accept((uv_stream_t*)&server->sock, (uv_stream_t*)client_sock);

uv_os_fd_t client_fd, client_fd_dup;
uv_fileno((uv_handle_t*)client_sock, &client_fd);

client_fd_dup=dup(client_fd);

uv_close((uv_handle_t*)&client_sock,  [](uv_handle_t* handle) -> void {
  uv_tcp_t *client_sock=(uv_tcp_t *)handle;
  delete  client_sock;
});
//pass client_fd_dup to another thread immediately OR inside uv_close 
callback
//and do "uv_tcp_open(&client->sock, client_fd_dup)" for client->sock which 
was inited for loop of that thread


This method seams to work and be legal for libuv. Any problems to expect?

-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to libuv+unsubscr...@googlegroups.com.
To post to this group, send email to libuv@googlegroups.com.
Visit this group at https://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/d/optout.

Reply via email to