Safari lädt einige Websites mit LWIP im Paket -Tunnel -Anbieter nicht ("konnte keine sichere Verbindung herstellen").IOS

Programmierung für iOS
Anonymous
 Safari lädt einige Websites mit LWIP im Paket -Tunnel -Anbieter nicht ("konnte keine sichere Verbindung herstellen").

Post by Anonymous »

Ich habe lwip in meinen iOS -Paketunnelanbieter integriert. Die meisten Websites laden erfolgreich, aber für einige Websites lädt die Seite bis zu ~ 60–80% und dann zeigt Safari plötzlich: < /p>

„Safari kann die Seite nicht öffnen, weil sie keine sichere Verbindung zum Server herstellen konnte. Die folgenden Protokolle während des Fehlers: < /p>

Code: Select all

[lwIP] +-------------------------------+
[lwIP] | 4 | 5 |  0x00 |        40     | (v, hl, tos, len)
[lwIP] +-------------------------------+
[lwIP] |        0      |010|       0   | (id, flags, offset)
[lwIP] +-------------------------------+
[lwIP] |   64  |    6  |    0x722d     | (ttl, proto, chksum)
[lwIP] +-------------------------------+
[lwIP] |  100  |   64  |    0  |    1  | (src)
[lwIP] +-------------------------------+
[lwIP] |  100  |   96  |    0  |    2  | (dest)
[lwIP] +-------------------------------+
[lwIP] ip4_input: p->len 40 p->tot_len 40
***** [LWIP] to close connection called from tcp_connection_closed_from_c
[lwIP] tcp_close: closing in
[lwIP] State: ESTABLISHED
[lwIP] tcp_enqueue_flags: queueing 529185:529186 (0x1)
[lwIP] tcp_pcb_purge
[lwIP] tcp_pcb_purge: not all data sent
[lwIP] MEMP_NUM_TCP_PCB: 64
[lwIP] check_resources_simple check_resources_simple: TCP_PCB=1/64,
[lwIP] TCP_SEG: 0/211 (errors: 0)
[lwIP] PBUF_POOL: 0/128 (errors: 0)
[lwIP] Memory: used=0, max=261340, errors=150
[lwIP] TCP_PCB pool: used=1, max=12, errors=0
[lwIP] ip_input: iphdr->dest 0x2006064 netif->ip_addr 0x1006064 (0x64, 0x64, 0x2006000)
[lwIP] ip4_input: packet accepted on interface v0
[lwIP] ip4_input:
[lwIP] IP header:
[lwIP] +-------------------------------+
[lwIP] | 4 | 5 |  0x00 |        40     | (v, hl, tos, len)
[lwIP] +-------------------------------+
[lwIP] |        0      |010|       0   | (id, flags, offset)
[lwIP] +-------------------------------+
[lwIP] |   64  |    6  |    0x722d     | (ttl, proto, chksum)
[lwIP] +-------------------------------+
[lwIP] |  100  |   64  |    0  |    1  | (src)
[lwIP] +-------------------------------+
[lwIP] |  100  |   96  |    0  |    2  | (dest)
[lwIP] +-------------------------------+
[lwIP] ip4_input: p->len 40 p->tot_len 40
***** [LWIP] to close connection called from tcp_connection_closed_from_c
[lwIP] tcp_close: closing in
[lwIP] State: ESTABLISHED
[lwIP] tcp_enqueue_flags: queueing 160285:160286 (0x1)
[lwIP] tcp_pcb_purge
[lwIP] tcp_pcb_purge: not all data sent
Ich sehe auch häufig Protokolle, die TCP_Write Fehler aufgrund unzureichender Puffer:
angeben:

Code: Select all

[lwIP] 📊 Before tcp_write:
[lwIP]    Data length: 4096 bytes
[lwIP]    Send buffer available: 1743 bytes
[lwIP]    Send queue length: 44
[lwIP]    MSS: 1460 bytes
[lwIP] ❌ Not enough send buffer: need 4096, have 1743
[lwIP] tcp_write failed:  -1
< /code>
Es scheint, als würde LWIP die Verbindung schließen, bevor alle Daten vollständig gesendet werden, möglicherweise aufgrund von Speicher- oder Pufferbeschränkungen.#ifndef LWIP_LWIPOPTS_H
#define LWIP_LWIPOPTS_H

// No OS integration
#define NO_SYS                         1
#define SYS_LIGHTWEIGHT_PROT           0

// Enable raw API, disable sockets/netconn
#define LWIP_RAW                       1
#define LWIP_NETCONN                   0
#define LWIP_SOCKET                    0

// IPv4 only (unless you explicitly enable IPv6 support)
#define LWIP_IPV4                      1
#define LWIP_IPV6                      0

#define LWIP_HAVE_SLIPIF 0

#define LWIP_TIMERS 1
#define LWIP_TIMEVAL_PRIVATE 0 // So it uses system timeval

#define MEMP_NUM_TCP_PCB 64

// Memory alignment (iOS = 4 bytes)
#define MEM_ALIGNMENT                  4
#define MEM_SIZE                       (256 * 1024) // bigger heap for larger buffers

// TCP configuration
#define LWIP_TCP                       1
#define TCP_TTL                        255
#define TCP_QUEUE_OOSEQ                1
#define TCP_MSS                        1460
#define TCP_MAXRTX                     6
#define TCP_SYNMAXRTX                  4

#define MEMP_NUM_TCP_SEG (TCP_SND_QUEUELEN + 32)
#define TCP_SND_QUEUELEN (4 * TCP_SND_BUF / TCP_MSS) // recommended formula
#define TCP_SND_BUF 65535
#define TCP_WND 65535

// If you understand the memory tradeoffs and still want to suppress the warning:
// #define LWIP_DISABLE_TCP_SANITY_CHECKS 1
//#define MEMP_NUM_TCP_SEG  (4 * TCP_SND_BUF / TCP_MSS)

// PBUF pool
#define PBUF_POOL_SIZE                 128
#define PBUF_POOL_BUFSIZE              (TCP_MSS + 40) // MSS + TCP/IP headers

// Network interface
#define LWIP_NETIF_STATUS_CALLBACK     1
#define LWIP_NETIF_LINK_CALLBACK       1
#define LWIP_NETIF_LOOPBACK            0

// IP options
#define IP_FORWARD                     0
#define IP_REASSEMBLY                  1
#define IP_FRAG                        1

// ARP
#define LWIP_ARP                       1
#define ARP_TABLE_SIZE                 10
#define ARP_QUEUEING                   1

// UDP (optional)
#define LWIP_UDP                       1
#define LWIP_UDPLITE                   0
#define UDP_TTL                        255

// ICMP (optional for ping, etc.)
#define LWIP_ICMP                      1
#define ICMP_TTL                       255

// DHCP/DNS (disabled unless used)
#define LWIP_DHCP                      0
#define LWIP_DNS                       0

// Debugging
#define LWIP_DEBUG 1
#define IP_DEBUG LWIP_DBG_ON
#define LWIP_DBG_TYPES_ON LWIP_DBG_ON

#define LWIP_STATS                     1
#define MEMP_STATS                     1    // ✅ ADDED: Enable memory pool stats

// Specific debug options
#define IP_DEBUG                       LWIP_DBG_ON
#define TCP_DEBUG                      LWIP_DBG_ON
#define TCP_OUTPUT_DEBUG                      LWIP_DBG_ON
#define MEMP_DEBUG                     LWIP_DBG_ON
#define LWIP_DBG_TYPES_ON             LWIP_DBG_ON

// ✅ ADDED: Socket specific options
#define LWIP_SO_RCVTIMEO               1
#define LWIP_SO_SNDTIMEO               1
#define SO_REUSE                       1

// ✅ ADDED: Connection management
#define TCP_LISTEN_BACKLOG             1
#define LWIP_TCP_KEEPALIVE             1

#endif /* LWIP_LWIPOPTS_H */

< /code>
 Fragen: < /strong> < /p>

 Hat jemand mit diesem [url=viewtopic.php?t=26065]Problem[/url] konfrontiert, bei dem Safari die Verbindung in der Mitte des Weges fallen lässt.snd_buf
, tcp_snd_queuelen usw.) oder unsachgemäße Handhabung von Teilschreibungen? Verbindungssperrungen?

Code: Select all

    void send_to_client(void *pcb_ptr, const uint8_t *data, uint16_t len) {
// Cast void* to struct tcp_pcb*
struct tcp_pcb *pcb = (struct tcp_pcb *)pcb_ptr;

// Basic safety checks
if (!pcb || !data || len == 0) {
return;
}

// Check PCB state - now this will work
if (pcb->state != ESTABLISHED &&  pcb->state != CLOSE_WAIT) {
LWIP_DEBUGF(IP_DEBUG, ("Warning: PCB not in writable state: %d\n", pcb->state));
return;
}

#if LWIP_STATS
// 🔍 DEBUG: Check available send buffer space
LWIP_DEBUGF(TCP_DEBUG, ("📊 Before tcp_write:\n"));
LWIP_DEBUGF(TCP_DEBUG, ("   Data length: %d bytes\n", len));
LWIP_DEBUGF(TCP_DEBUG, ("   Send buffer available: %d bytes\n", pcb->snd_buf));
LWIP_DEBUGF(TCP_DEBUG, ("   Send queue length: %d\n", pcb->snd_queuelen));
LWIP_DEBUGF(TCP_DEBUG, ("   MSS: %d bytes\n", pcb->mss));
#else
LWIP_DEBUGF(IP_DEBUG, ("%s: Stats disabled - enable LWIP_STATS in lwipopts.h\n", label));
#endif
// 🔍 Check if we have enough space
if (len > pcb->snd_buf) {
LWIP_DEBUGF(TCP_DEBUG, ("❌ Not enough send buffer: need %d, have %d\n",
len, pcb->snd_buf));
//            return;
}

// Try to write data
err_t err = tcp_write(pcb, data, len, TCP_WRITE_FLAG_COPY);
if (err != ERR_OK) {
LWIP_DEBUGF(IP_DEBUG, ("tcp_write failed: %d\n", err));
return;
}

// Send it out
err = tcp_output(pcb);
if (err != ERR_OK) {
LWIP_DEBUGF(IP_DEBUG, ("tcp_output failed: %d\n", err));
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post