diff options
| author | 2024-01-15 23:18:10 -0500 | |
|---|---|---|
| committer | 2024-01-15 23:18:10 -0500 | |
| commit | e2fb1d3a5f8b810eaefbff469cfcb3eddad7cbf3 (patch) | |
| tree | 0dafe88c8832da97d8c305fb98d23f397cfa7f54 /src/socket | |
| parent | 4e9c4b8ec81e612b03477fcc68def4b8878cf3ac (diff) | |
| download | libnaunet-e2fb1d3a5f8b810eaefbff469cfcb3eddad7cbf3.tar.gz libnaunet-e2fb1d3a5f8b810eaefbff469cfcb3eddad7cbf3.tar.bz2 libnaunet-e2fb1d3a5f8b810eaefbff469cfcb3eddad7cbf3.zip | |
Continue windows build fix
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/socket')
| -rw-r--r-- | src/socket/socket_linux.c | 13 | ||||
| -rw-r--r-- | src/socket/socket_windows.c | 22 |
2 files changed, 23 insertions, 12 deletions
diff --git a/src/socket/socket_linux.c b/src/socket/socket_linux.c index 3d141b7..4b2f56a 100644 --- a/src/socket/socket_linux.c +++ b/src/socket/socket_linux.c @@ -93,6 +93,10 @@ void aki_socket_set_recv_buf(struct aki_socket *s, u32 rcvbuf) al_assert(aki_socket_get_recv_buf(s) == receive_queue_size); } +#define al_log_socket_err(func) \ + al_log_error("socket", #func"(%.*s:%d) failed: %s (%d).", \ + AL_STR_PRINTF(addr), port, aki_strerror(errno), errno); + bool aki_socket_listen(struct aki_socket *s, str *addr, s32 port) { struct sockaddr *saddr = NULL; @@ -123,12 +127,12 @@ bool aki_socket_listen(struct aki_socket *s, str *addr, s32 port) } if (bind(s->sock, saddr, addrlen) < 0) { - al_log_error("socket", "Failed to bind (%.*s:%d).", AL_STR_PRINTF(addr), port); + al_log_socket_err(bind) return false; } if (listen(s->sock, SOMAXCONN) < 0) { - al_log_error("socket", "Failed to listen (%.*s:%d).", AL_STR_PRINTF(addr), port); + al_log_socket_err(listen) return false; } @@ -209,7 +213,7 @@ bool aki_socket_connect(struct aki_socket *s, str *addr, s32 port) case AKI_SOCKET_UDP: { s32 ret = connect(s->sock, (struct sockaddr *)&s->addr_in, sizeof(s->addr_in)); if (ret != 0 && errno != 115) { - al_log_error("socket", "Failed to connect: %s (%d).", aki_strerror(errno), errno); + al_log_socket_err(connect) return false; } break; @@ -219,13 +223,14 @@ bool aki_socket_connect(struct aki_socket *s, str *addr, s32 port) al_memcpy(s->addr_un.sun_path, addr->data, addr->len); s->addr_un.sun_path[addr->len] = '\0'; if (connect(s->sock, (struct sockaddr *)&s->addr_un, sizeof(s->addr_un)) < 0) { - al_log_error("socket", "Failed to connect: %s (%d).", aki_strerror(errno), errno); + al_log_socket_err(connect) return false; } break; } default: al_assert(false); + break; } signal(SIGPIPE, SIG_IGN); diff --git a/src/socket/socket_windows.c b/src/socket/socket_windows.c index b83ae52..e19c16f 100644 --- a/src/socket/socket_windows.c +++ b/src/socket/socket_windows.c @@ -26,7 +26,7 @@ bool aki_socket_init(struct aki_socket *s) void aki_socket_set_blocking(struct aki_socket *s, bool blocking) { - u_long mode = (blocking) ? 0 : 1; + u_long mode = blocking ? 0 : 1; ioctlsocket(s->sock, FIONBIO, &mode); } @@ -36,18 +36,22 @@ void aki_socket_set_no_delay(struct aki_socket *s, s32 no_delay) (void)no_delay; } +#define al_log_socket_err(func) \ + al_log_error("socket", #func"(%.*s:%d) failed: %d.", \ + AL_STR_PRINTF(addr), port, WSAGetLastError()); + bool aki_socket_listen(struct aki_socket *s, str *addr, s32 port) { s->addr_in.sin_family = AF_INET; s->addr_in.sin_addr.s_addr = INADDR_ANY; - s->addr_in.sin_port = htons(port); - al_memset(&(s->addr_in.sin_zero), '\0', 8); + s->addr_in.sin_port = aki_htons(port); + al_memset(s->addr_in.sin_zero, '\0', 8); if (bind(s->sock, (SOCKADDR *)&s->addr_in, sizeof(s->addr_in)) == SOCKET_ERROR) { - al_log_error("socket", "Failed to bind (%.*s:%d).", AL_STR_PRINTF(addr), port); + al_log_socket_err(bind); return false; } if (listen(s->sock, SOMAXCONN) == SOCKET_ERROR) { - al_log_error("socket", "Failed to listen (%.*s:%d).", AL_STR_PRINTF(addr), port); + al_log_socket_err(listen); return false; } return true; @@ -70,9 +74,11 @@ bool aki_socket_connect(struct aki_socket *s, str *addr, s32 port) char *c_str = al_str_to_c_str(addr); InetPton(AF_INET, c_str, &s->addr_in.sin_addr.s_addr); al_free(c_str); - s->addr_in.sin_port = htons(port); - al_memset(&(s->addr_in.sin_zero), '\0', 8); - if (connect(s->sock, (SOCKADDR *)&s->addr_in, sizeof(s->addr_in)) == SOCKET_ERROR) { + s->addr_in.sin_port = aki_htons(port); + al_memset(s->addr_in.sin_zero, '\0', 8); + s32 ret = connect(s->sock, (SOCKADDR *)&s->addr_in, sizeof(s->addr_in)); + if (ret == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) { + al_log_socket_err(connect); return false; } return true; |