int zbx_get_data_from_server(zbx_socket_t *sock, char **buffer, size_t buffer_size, size_t reserved, char **error)
#include "zbxcommshigh.h"
#if !defined(_WINDOWS) && !defined(__MINGW32)
void zbx_addrs_failover(zbx_vector_addr_ptr_t *addrs)
if (1 < addrs->values_num)
zbx_addr_t *addr = addrs->values[0];
zbx_vector_addr_ptr_remove(addrs, 0);
zbx_vector_addr_ptr_append(addrs, addr);
static int zbx_tcp_connect_failover(zbx_socket_t *s, const char *source_ip, zbx_vector_addr_ptr_t *addrs,
int timeout, int connect_timeout, unsigned int tls_connect, const char *tls_arg1, const char *tls_arg2,
for (i = 0; i < addrs->values_num; i++)
addr = (zbx_addr_t *)addrs->values[0];
if (FAIL != (ret = zbx_tcp_connect(s, source_ip, addr->ip, addr->port, connect_timeout, tls_connect,
zbx_socket_set_deadline(s, timeout);
zabbix_log(loglevel, "Unable to connect to [%s]:%d [%s]",
((zbx_addr_t *)addrs->values[0])->ip, ((zbx_addr_t *)addrs->values[0])->port,
zbx_addrs_failover(addrs);
int zbx_connect_to_server(zbx_socket_t *sock, const char *source_ip, zbx_vector_addr_ptr_t *addrs, int timeout,
int connect_timeout, int retry_interval, int level, const zbx_config_tls_t *config_tls)
const char *tls_arg1, *tls_arg2;
zabbix_log(LOG_LEVEL_DEBUG, "In %s() [%s]:%d [timeout:%d, connection timeout:%d]", __func__,
addrs->values[0]->ip, addrs->values[0]->port, timeout, connect_timeout);
switch (config_tls->connect_mode)
case ZBX_TCP_SEC_UNENCRYPTED:
#if defined(HAVE_GNUTLS) || defined(HAVE_OPENSSL)
case ZBX_TCP_SEC_TLS_CERT:
tls_arg1 = config_tls->server_cert_issuer;
tls_arg2 = config_tls->server_cert_subject;
case ZBX_TCP_SEC_TLS_PSK:
tls_arg1 = config_tls->psk_identity;