Skip to content

Instantly share code, notes, and snippets.

@saghul
Created June 27, 2016 21:49
Show Gist options
  • Save saghul/ad29f3f667e849f6a80782a049f7b8de to your computer and use it in GitHub Desktop.
Save saghul/ad29f3f667e849f6a80782a049f7b8de to your computer and use it in GitHub Desktop.
int uttp_worker_start(uttp_worker_t* worker, uttp_worker_config_t* config) {
int r;
int on;
int fd;
uttp_server_t* server = config->server;
memset(worker, 0, sizeof(*worker));
snprintf(worker->name, sizeof(worker->name), "Worker #%d", config->id);
worker->server = server;
QUEUE_INIT(&worker->conn_queue);
r = uv_loop_init(&worker->loop);
ASSERT(r == 0);
r = uv_async_init(&worker->loop, &worker->stop_async, uttp__worker_stop);
ASSERT(r == 0);
r = uv_tcp_init_ex(&worker->loop, &worker->tcp_listener, server->address.ss_family);
ASSERT(r == 0);
r = uv_fileno((uv_handle_t*) &worker->tcp_listener, &fd);
ASSERT(r == 0);
ASSERT(fd != -1);
on = 1;
r = setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on));
ASSERT(r == 0);
r = uv_tcp_bind(&worker->tcp_listener, (const struct sockaddr*) &server->address, 0);
ASSERT(r == 0);
r = uv_thread_create(&worker->thread, uttp__worker_run, worker);
ASSERT(r == 0);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment