mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-04-18 05:38:36 +01:00
Allow data RX during TCP CLOSE_WAIT state.
Alter GopherDl to close TCP socket on success/failure. Revert GopherOpen TCP timeout to default. Change NetLog to no longer be self-focusable. (This way, window manager won't tile it like other windows.)
This commit is contained in:
parent
8a4fb38873
commit
ff564b4fe0
6 changed files with 13 additions and 15 deletions
src
Home/Net
System
|
@ -37,7 +37,7 @@ I64 GopherOpen(U8 *host, U16 port, U8 *selector, U8 *query)
|
|||
line = StrPrint(NULL, "%s\t%s\r\n", selector, query);
|
||||
}
|
||||
|
||||
sock(CTCPSocket *)->timeout = TCP_TIMEOUT * 5;
|
||||
sock(CTCPSocket *)->timeout = TCP_TIMEOUT;
|
||||
|
||||
// sendString(sock, line, 0);
|
||||
TCPSocketSendString(sock, line);
|
||||
|
@ -80,6 +80,7 @@ public I64 GopherDl(U8 *host, U16 port = 70, U8 *selector, U8 *query = NULL, U8
|
|||
}
|
||||
f->de.size = total_len;
|
||||
FClose(f);
|
||||
TCPSocketClose(sock);
|
||||
return got;
|
||||
}
|
||||
data_len += got;
|
||||
|
@ -95,6 +96,7 @@ public I64 GopherDl(U8 *host, U16 port = 70, U8 *selector, U8 *query = NULL, U8
|
|||
}
|
||||
}
|
||||
|
||||
TCPSocketClose(sock);
|
||||
PrintErr("Write failed, %s may be corrupted\n", dest);
|
||||
FClose(f);
|
||||
return -1;
|
||||
|
|
|
@ -1236,25 +1236,18 @@ I64 TCPSocketReceive(CTCPSocket *tcp_socket, U8 *buffer, I64 length)
|
|||
|
||||
timeout = counts.jiffies + tcp_socket->timeout * JIFFY_FREQ / 1000;
|
||||
|
||||
while ((tcp_socket->state == TCP_STATE_ESTABLISHED || tcp_socket->state == TCP_STATE_FIN_WAIT1) &&
|
||||
while ((tcp_socket->state == TCP_STATE_ESTABLISHED ||
|
||||
tcp_socket->state == TCP_STATE_FIN_WAIT1 ||
|
||||
tcp_socket->state == TCP_STATE_CLOSE_WAIT) && // allowing receive during closing state
|
||||
tcp_socket->read_position == tcp_socket->write_position)
|
||||
{
|
||||
TCPCheckACKQueue(tcp_socket);
|
||||
Sleep(1);
|
||||
|
||||
if (counts.jiffies > timeout)
|
||||
{
|
||||
// if (tcp_socket->timeout != 0) // Don't flood NetLog on non-blocking receives.
|
||||
// NetErr("TCP SOCKET RECEIVE: Timed out.");
|
||||
|
||||
// return -1;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Shrine has TODO: Should still be able to receive in closing states ...
|
||||
if ((tcp_socket->state != TCP_STATE_ESTABLISHED || tcp_socket->state == TCP_STATE_FIN_WAIT1) &&
|
||||
tcp_socket->read_position == tcp_socket->write_position || length == 0)
|
||||
return 0;
|
||||
|
@ -1643,4 +1636,4 @@ U0 TCPRep()
|
|||
}
|
||||
|
||||
|
||||
TCPGlobalsInit;
|
||||
TCPGlobalsInit;
|
||||
|
|
|
@ -14,6 +14,7 @@ Bool TCPHandleValidSEQ(CTCPSocket *tcp_socket, CTCPHeader *header, U32 segment_s
|
|||
case TCP_STATE_ESTABLISHED:
|
||||
case TCP_STATE_FIN_WAIT1:
|
||||
case TCP_STATE_FIN_WAIT2: // FIN2 check is ommitted in Shrine, yet used in below logic. Adding.
|
||||
case TCP_STATE_CLOSE_WAIT: // allowing data to be pushed to receive buffer during closing state
|
||||
|
||||
NetDebug("TCP HANDLE VALID SEQ: Updating data in receive buffer.");
|
||||
|
||||
|
@ -364,4 +365,4 @@ I64 TCPHandler(CIPV4Packet *packet)
|
|||
NetDebug("TCP HANDLER: Running TCP HANDLE SOCKET");
|
||||
TCPHandleSocket(tcp_socket, packet, header, data, length);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,6 +30,8 @@ U0 NetLogInit()
|
|||
WinFocus(net_log_task);
|
||||
|
||||
DocPrint(net_log_task->put_doc, "$$WW+H,1$$");
|
||||
|
||||
Bts(&net_log_task->win_inhibit, WIf_SELF_FOCUS);
|
||||
}
|
||||
|
||||
U0 NetLog(U8 *format, ...)
|
||||
|
|
|
@ -16,7 +16,7 @@ U0 LoadDocDefines()
|
|||
|
||||
$TR,"LineRep"$
|
||||
$ID,2$DefinePrint("DD_ZEALOS_LOC","95,264");
|
||||
$ID,-2$
|
||||
$ID,-2$
|
||||
DefinePrint("DD_MP_VECT", "%08X", MP_VECT_ADDR);
|
||||
DefinePrint("DD_MP_VECT_END", "%08X", MP_VECT_ADDR + COREAP_16BIT_INIT_END - COREAP_16BIT_INIT - 1);
|
||||
|
||||
|
|
|
@ -413,7 +413,7 @@ U0 GrUpdateScreen()
|
|||
GrUpdateTasks;
|
||||
DCBlotColor8(gr.dc2, gr.dc);
|
||||
|
||||
dc=DCAlias(gr.dc2, Fs);
|
||||
dc = DCAlias(gr.dc2, Fs);
|
||||
dc->flags |= DCF_ON_TOP;
|
||||
if (gr.fp_final_screen_update)
|
||||
(*gr.fp_final_screen_update)(dc);
|
||||
|
|
Loading…
Reference in a new issue