Sn_SR register shows undefined 0x28 state of TCP socket

Hi everyone!
Can you please help me understand the root cause of the issue I faced. I’ve been searching on the Internet for a long time by with no luck.
I’m using stm32f103 + W5500 board.
Application is running on STM32 as a TCP server and uses raw TCP to communicate with clients.
Everything works good if a TCP client consiquently sends request, receives for the whole response from server, and then sends next request and so on.
But if a client sends next request before it receives the whole response from TCP server (my STM32+W5500 board), W5500 chip goes down on recieving this request during the current response is still being sent.

I’m using this library

getSn_SR(TCP_SOCKET) returns 0x28 status which is not documented in the datasheet and wizphy_getphylink() returns PHY_LINK_OFF

Below is main part of the rx code in the interrupt IRQ:

        irq_val = getSn_IR(TCP_SOCKET);
        if (irq_val & Sn_IR_RECV) { // It means we receive a packet in socket TCP_SOCKET
            if ((rcvd_size = getSn_RX_RSR(TCP_SOCKET)) > 0) {
                uint16_t next_head;
                char data;
                while (rcvd_size--) {
                    ret = recv(TCP_SOCKET, (uint8_t *)&data, 1);
                    if (ret > 0) {
                        next_head = (rxbuf.head + 1) & (RX_BUFFER_SIZE - 1);
                        if(!, StreamType_Serial)) {
                  [rxbuf.head] = data;
                            rxbuf.head = next_head;

            setSn_IR(TCP_SOCKET, Sn_IR_RECV); // Clearing RECV interrupt flag

Below is tx function:

void ethWriteS (const char *s)
    char *ptr = (char *)s;
    int32_t ret;
    uint16_t sent_size = 0, length = strlen(s);

    while(sent_size != length) {
        ret = send(TCP_SOCKET, (uint8_t *)ptr + sent_size, length - sent_size);
        if (ret >=0 ) {
            sent_size += ret;
        else {
            //print_debug("Send error: %d\n", ret);

Wireshark trace below. is my TCP server (STM32+W5500) is a TCP client. was transmitting a response but unexpectedly client sends the next request (packet #411), and after that W5500 goes down with socket status 0x28.

Is the link really off - link LED is off?

This is unclear, please rephrase.