Changeset 8c7a054 in mainline for uspace/srv/net/tl/tcp/tqueue.c
- Timestamp:
- 2011-10-21T15:25:43Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 32aea9f4
- Parents:
- d9ce049
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tl/tcp/tqueue.c
rd9ce049 r8c7a054 92 92 { 93 93 size_t avail_wnd; 94 size_t xfer_seqlen; 95 size_t snd_buf_seqlen; 94 96 size_t data_size; 97 tcp_control_t ctrl; 98 95 99 tcp_segment_t *seg; 96 100 … … 99 103 /* Number of free sequence numbers in send window */ 100 104 avail_wnd = (conn->snd_una + conn->snd_wnd) - conn->snd_nxt; 105 snd_buf_seqlen = conn->snd_buf_used + (conn->snd_buf_fin ? 1 : 0); 101 106 102 data_size = min(conn->snd_buf_used, avail_wnd); 103 log_msg(LVL_DEBUG, "conn->snd_buf_used = %zu, SND.WND = %zu, " 104 "data_size = %zu", conn->snd_buf_used, conn->snd_wnd, data_size); 107 xfer_seqlen = min(snd_buf_seqlen, avail_wnd); 108 log_msg(LVL_DEBUG, "snd_buf_seqlen = %zu, SND.WND = %zu, " 109 "xfer_seqlen = %zu", snd_buf_seqlen, conn->snd_wnd, 110 xfer_seqlen); 105 111 106 if ( data_size== 0)112 if (xfer_seqlen == 0) 107 113 return; 108 114 109 115 /* XXX Do not always send immediately */ 110 116 111 seg = tcp_segment_make_data(0, conn->snd_buf, data_size); 117 data_size = xfer_seqlen - (conn->snd_buf_fin ? 1 : 0); 118 if (conn->snd_buf_fin && data_size + 1 == xfer_seqlen) { 119 /* We are sending out FIN */ 120 ctrl = CTL_FIN; 121 } else { 122 ctrl = 0; 123 } 124 125 seg = tcp_segment_make_data(ctrl, conn->snd_buf, data_size); 112 126 if (seg == NULL) { 113 127 log_msg(LVL_ERROR, "Memory allocation failure."); … … 119 133 conn->snd_buf_used - data_size); 120 134 conn->snd_buf_used -= data_size; 135 conn->snd_buf_fin = false; 121 136 122 137 tcp_tqueue_seg(conn, seg);
Note:
See TracChangeset
for help on using the changeset viewer.