mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-20 08:40:16 +00:00
Merge "Use non-blocking socket() and pipe() wrappers" into 16
This commit is contained in:
@@ -746,7 +746,7 @@ void ast_tcptls_server_start(struct ast_tcptls_session_args *desc)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
desc->accept_fd = socket(ast_sockaddr_is_ipv6(&desc->local_address) ?
|
desc->accept_fd = ast_socket_nonblock(ast_sockaddr_is_ipv6(&desc->local_address) ?
|
||||||
AF_INET6 : AF_INET, SOCK_STREAM, 0);
|
AF_INET6 : AF_INET, SOCK_STREAM, 0);
|
||||||
if (desc->accept_fd < 0) {
|
if (desc->accept_fd < 0) {
|
||||||
ast_log(LOG_ERROR, "Unable to allocate socket for %s: %s\n", desc->name, strerror(errno));
|
ast_log(LOG_ERROR, "Unable to allocate socket for %s: %s\n", desc->name, strerror(errno));
|
||||||
@@ -767,7 +767,6 @@ void ast_tcptls_server_start(struct ast_tcptls_session_args *desc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
systemd_socket_activation:
|
systemd_socket_activation:
|
||||||
ast_fd_set_flags(desc->accept_fd, O_NONBLOCK);
|
|
||||||
if (ast_pthread_create_background(&desc->master, NULL, desc->accept_fn, desc)) {
|
if (ast_pthread_create_background(&desc->master, NULL, desc->accept_fn, desc)) {
|
||||||
ast_log(LOG_ERROR, "Unable to launch thread for %s on %s: %s\n",
|
ast_log(LOG_ERROR, "Unable to launch thread for %s on %s: %s\n",
|
||||||
desc->name,
|
desc->name,
|
||||||
|
|||||||
@@ -1037,13 +1037,12 @@ struct ast_udptl *ast_udptl_new_with_bindaddr(struct ast_sched_context *sched, s
|
|||||||
udptl->tx[i].buf_len = -1;
|
udptl->tx[i].buf_len = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((udptl->fd = socket(ast_sockaddr_is_ipv6(addr) ?
|
if ((udptl->fd = ast_socket_nonblock(ast_sockaddr_is_ipv6(addr) ?
|
||||||
AF_INET6 : AF_INET, SOCK_DGRAM, 0)) < 0) {
|
AF_INET6 : AF_INET, SOCK_DGRAM, 0)) < 0) {
|
||||||
ast_free(udptl);
|
ast_free(udptl);
|
||||||
ast_log(LOG_WARNING, "Unable to allocate socket: %s\n", strerror(errno));
|
ast_log(LOG_WARNING, "Unable to allocate socket: %s\n", strerror(errno));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
ast_fd_set_flags(udptl->fd, O_NONBLOCK);
|
|
||||||
|
|
||||||
#ifdef SO_NO_CHECK
|
#ifdef SO_NO_CHECK
|
||||||
if (cfg->general->nochecksums)
|
if (cfg->general->nochecksums)
|
||||||
|
|||||||
@@ -2071,16 +2071,11 @@ static enum agi_result launch_netscript(char *agiurl, char *argv[], int *fds)
|
|||||||
ast_sockaddr_set_port(&addrs[i], AGI_PORT);
|
ast_sockaddr_set_port(&addrs[i], AGI_PORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((s = socket(addrs[i].ss.ss_family, SOCK_STREAM, IPPROTO_TCP)) < 0) {
|
if ((s = ast_socket_nonblock(addrs[i].ss.ss_family, SOCK_STREAM, IPPROTO_TCP)) < 0) {
|
||||||
ast_log(LOG_WARNING, "Unable to create socket: %s\n", strerror(errno));
|
ast_log(LOG_WARNING, "Unable to create socket: %s\n", strerror(errno));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ast_fd_set_flags(s, O_NONBLOCK)) {
|
|
||||||
close(s);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ast_connect(s, &addrs[i]) && errno == EINPROGRESS) {
|
if (ast_connect(s, &addrs[i]) && errno == EINPROGRESS) {
|
||||||
|
|
||||||
if (handle_connection(agiurl, addrs[i], s)) {
|
if (handle_connection(agiurl, addrs[i], s)) {
|
||||||
|
|||||||
@@ -3112,22 +3112,19 @@ static double stddev_compute(double stddev, double sample, double normdev, doubl
|
|||||||
|
|
||||||
static int create_new_socket(const char *type, int af)
|
static int create_new_socket(const char *type, int af)
|
||||||
{
|
{
|
||||||
int sock = socket(af, SOCK_DGRAM, 0);
|
int sock = ast_socket_nonblock(af, SOCK_DGRAM, 0);
|
||||||
|
|
||||||
if (sock < 0) {
|
if (sock < 0) {
|
||||||
if (!type) {
|
|
||||||
type = "RTP/RTCP";
|
|
||||||
}
|
|
||||||
ast_log(LOG_WARNING, "Unable to allocate %s socket: %s\n", type, strerror(errno));
|
ast_log(LOG_WARNING, "Unable to allocate %s socket: %s\n", type, strerror(errno));
|
||||||
} else {
|
return sock;
|
||||||
ast_fd_set_flags(sock, O_NONBLOCK);
|
|
||||||
#ifdef SO_NO_CHECK
|
|
||||||
if (nochecksums) {
|
|
||||||
setsockopt(sock, SOL_SOCKET, SO_NO_CHECK, &nochecksums, sizeof(nochecksums));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef SO_NO_CHECK
|
||||||
|
if (nochecksums) {
|
||||||
|
setsockopt(sock, SOL_SOCKET, SO_NO_CHECK, &nochecksums, sizeof(nochecksums));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return sock;
|
return sock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,6 @@ static struct {
|
|||||||
static void *pthread_timer_open(void)
|
static void *pthread_timer_open(void)
|
||||||
{
|
{
|
||||||
struct pthread_timer *timer;
|
struct pthread_timer *timer;
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!(timer = ao2_alloc(sizeof(*timer), pthread_timer_destructor))) {
|
if (!(timer = ao2_alloc(sizeof(*timer), pthread_timer_destructor))) {
|
||||||
errno = ENOMEM;
|
errno = ENOMEM;
|
||||||
@@ -124,15 +123,11 @@ static void *pthread_timer_open(void)
|
|||||||
timer->pipe[PIPE_READ] = timer->pipe[PIPE_WRITE] = -1;
|
timer->pipe[PIPE_READ] = timer->pipe[PIPE_WRITE] = -1;
|
||||||
timer->state = TIMER_STATE_IDLE;
|
timer->state = TIMER_STATE_IDLE;
|
||||||
|
|
||||||
if (pipe(timer->pipe)) {
|
if (ast_pipe_nonblock(timer->pipe)) {
|
||||||
ao2_ref(timer, -1);
|
ao2_ref(timer, -1);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_LEN(timer->pipe); ++i) {
|
|
||||||
ast_fd_set_flags(timer->pipe[i], O_NONBLOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
ao2_lock(pthread_timers);
|
ao2_lock(pthread_timers);
|
||||||
if (!ao2_container_count(pthread_timers)) {
|
if (!ao2_container_count(pthread_timers)) {
|
||||||
ast_mutex_lock(&timing_thread.lock);
|
ast_mutex_lock(&timing_thread.lock);
|
||||||
|
|||||||
Reference in New Issue
Block a user