server_socket: add method _add_fd()
This commit is contained in:
@@ -299,6 +299,36 @@ one_socket_new(unsigned serial, const struct sockaddr *address,
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
server_socket_add_fd(struct server_socket *ss, int fd, GError **error_r)
|
||||||
|
{
|
||||||
|
assert(ss != NULL);
|
||||||
|
assert(ss->sockets_tail_r != NULL);
|
||||||
|
assert(*ss->sockets_tail_r == NULL);
|
||||||
|
assert(fd >= 0);
|
||||||
|
|
||||||
|
struct sockaddr_storage address;
|
||||||
|
socklen_t address_length;
|
||||||
|
if (getsockname(fd, (struct sockaddr *)&address,
|
||||||
|
&address_length) < 0) {
|
||||||
|
g_set_error(error_r, server_socket_quark(), errno,
|
||||||
|
"Failed to get socket address: %s",
|
||||||
|
g_strerror(errno));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct one_socket *s = one_socket_new(ss->next_serial,
|
||||||
|
(struct sockaddr *)&address,
|
||||||
|
address_length);
|
||||||
|
s->parent = ss;
|
||||||
|
*ss->sockets_tail_r = s;
|
||||||
|
ss->sockets_tail_r = &s->next;
|
||||||
|
|
||||||
|
set_fd(s, fd);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static struct one_socket *
|
static struct one_socket *
|
||||||
server_socket_add_address(struct server_socket *ss,
|
server_socket_add_address(struct server_socket *ss,
|
||||||
const struct sockaddr *address,
|
const struct sockaddr *address,
|
||||||
|
@@ -43,6 +43,14 @@ server_socket_open(struct server_socket *ss, GError **error_r);
|
|||||||
void
|
void
|
||||||
server_socket_close(struct server_socket *ss);
|
server_socket_close(struct server_socket *ss);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a socket descriptor that is accepting connections. After this
|
||||||
|
* has been called, don't call server_socket_open(), because the
|
||||||
|
* socket is already open.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
server_socket_add_fd(struct server_socket *ss, int fd, GError **error_r);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a listener on a port on all interfaces.
|
* Add a listener on a port on all interfaces.
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user