|
|
|
|
@ -659,7 +659,7 @@ struct ETCP_SOCKET* etcp_socket_add(struct UTUN_INSTANCE* instance, struct CFG_S
|
|
|
|
|
|
|
|
|
|
if (family == AF_INET6) { |
|
|
|
|
int v6only = 1; |
|
|
|
|
if (setsockopt(e_sock->fd, IPPROTO_IPV6, IPV6_V6ONLY, &v6only, sizeof(v6only)) < 0) { |
|
|
|
|
if (setsockopt(e_sock->fd, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&v6only, sizeof(v6only)) < 0) { |
|
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_SOCKET, "Failed to set IPV6_V6ONLY: %s", socket_strerror(socket_get_error())); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -1020,7 +1020,8 @@ void tcp_socket_remove(struct ETCP_SOCKET* sock) {
|
|
|
|
|
|
|
|
|
|
// Создание нового ETCP_LINK: аллокация, выделение local_link_id, инициализация BBR/keepalive,
|
|
|
|
|
// вставка в список коннекта и links_queue сокета. Для outbound UDP сразу запускает handshake.
|
|
|
|
|
struct ETCP_LINK* etcp_link_new(struct ETCP_CONN* etcp, struct ETCP_SOCKET* conn, struct sockaddr_storage* remote_addr, uint8_t is_server) { |
|
|
|
|
struct ETCP_LINK* etcp_link_new(struct ETCP_CONN* etcp, struct ETCP_SOCKET* conn, |
|
|
|
|
const struct sockaddr_storage* remote_addr, uint8_t is_server) { |
|
|
|
|
DEBUG_TRACE(DEBUG_CATEGORY_ETCP, ""); |
|
|
|
|
if (!etcp) { DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "null etcp"); return NULL; } |
|
|
|
|
if (etcp->state == 2) { DEBUG_WARN(DEBUG_CATEGORY_ETCP, "[%s] link_new on deleted conn", etcp->log_name); return NULL; } |
|
|
|
|
|