feat: more log of net connect

Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>
This commit is contained in:
Jianhui Zhao
2025-05-14 18:35:24 +08:00
parent 3ba4ef039b
commit ce3524ebdc

View File

@@ -22,6 +22,7 @@
* SOFTWARE.
*/
#include <arpa/inet.h>
#include <stdbool.h>
#include <unistd.h>
#include <stdlib.h>
@@ -37,6 +38,7 @@
struct net_context {
struct ev_timer tmr;
struct ev_io iow;
char addr[128];
int sock;
void *arg;
@@ -55,6 +57,23 @@ static const char *port2str(int port)
return buffer;
}
static void sockaddr_to_str(const struct sockaddr *addr, char *buf, size_t len)
{
char ip[INET6_ADDRSTRLEN] = "";
int port;
if (addr->sa_family == AF_INET) {
struct sockaddr_in *in = (struct sockaddr_in *)addr;
inet_ntop(AF_INET, &in->sin_addr, ip, sizeof(ip));
port = ntohs(in->sin_port);
} else {
struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)addr;
inet_ntop(AF_INET6, &in6->sin6_addr, ip, sizeof(ip));
port = ntohs(in6->sin6_port);
}
snprintf(buf, len, "%s:%d", ip, port);
}
static void sock_write_cb(struct ev_loop *loop, struct ev_io *w, int revents)
{
@@ -73,7 +92,7 @@ static void sock_write_cb(struct ev_loop *loop, struct ev_io *w, int revents)
}
if (err > 0) {
log_err("network connect failed: %s\n", strerror(err));
log_err("connect '%s' failed: %s\n", ctx->addr, strerror(err));
goto err;
}
@@ -91,7 +110,7 @@ static void timer_cb(struct ev_loop *loop, struct ev_timer *w, int revents)
{
struct net_context *ctx = container_of(w, struct net_context, tmr);
log_err("network connect timeout\n");
log_err("connect '%s' timeout\n", ctx->addr);
ev_io_stop(loop, &ctx->iow);
close(ctx->sock);
@@ -100,7 +119,8 @@ static void timer_cb(struct ev_loop *loop, struct ev_timer *w, int revents)
}
static void wait_connect(struct ev_loop *loop, int sock, int timeout,
void (*on_connected)(int sock, void *arg), void *arg)
const struct sockaddr *addr,
void (*on_connected)(int sock, void *arg), void *arg)
{
struct net_context *ctx = calloc(1, sizeof(struct net_context));
@@ -108,6 +128,8 @@ static void wait_connect(struct ev_loop *loop, int sock, int timeout,
ctx->arg = arg;
ctx->on_connected = on_connected;
sockaddr_to_str(addr, ctx->addr, sizeof(ctx->addr));
ev_timer_init(&ctx->tmr, timer_cb, timeout, 0);
ev_timer_start(loop, &ctx->tmr);
@@ -128,10 +150,12 @@ int tcp_connect_sockaddr(struct ev_loop *loop, const struct sockaddr *addr, sock
if (connect(sock, addr, addrlen) < 0) {
if (errno != EINPROGRESS) {
log_err("connect failed: %s\n", strerror(errno));
char buf[128];
sockaddr_to_str(addr, buf, sizeof(buf));
log_err("connect '%s' failed: %s\n", buf, strerror(errno));
goto err;
}
wait_connect(loop, sock, 3, on_connected, arg);
wait_connect(loop, sock, 3, addr, on_connected, arg);
} else {
on_connected(sock, arg);
}