diff options
-rw-r--r-- | sys/netinet/sctp_output.c | 7 | ||||
-rw-r--r-- | sys/netinet/sctp_usrreq.c | 2 |
2 files changed, 5 insertions, 4 deletions
diff --git a/sys/netinet/sctp_output.c b/sys/netinet/sctp_output.c index d648d18..d1c9d71 100644 --- a/sys/netinet/sctp_output.c +++ b/sys/netinet/sctp_output.c @@ -11627,7 +11627,7 @@ sctp_lower_sosend(struct socket *so, local_add_more = sndlen; } len = 0; - if (non_blocking == 0) { + if (non_blocking) { goto skip_preblock; } if (((max_len <= local_add_more) && @@ -11667,8 +11667,9 @@ sctp_lower_sosend(struct socket *so, } inqueue_bytes = stcb->asoc.total_output_queue_size - (stcb->asoc.chunks_on_out_queue * sizeof(struct sctp_data_chunk)); } - if (SCTP_SB_LIMIT_SND(so) > stcb->asoc.total_output_queue_size) { - max_len = SCTP_SB_LIMIT_SND(so) - stcb->asoc.total_output_queue_size; + inqueue_bytes = stcb->asoc.total_output_queue_size - (stcb->asoc.chunks_on_out_queue * sizeof(struct sctp_data_chunk)); + if (SCTP_SB_LIMIT_SND(so) > inqueue_bytes) { + max_len = SCTP_SB_LIMIT_SND(so) - inqueue_bytes; } else { max_len = 0; } diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c index 070c9a7..aea2db5 100644 --- a/sys/netinet/sctp_usrreq.c +++ b/sys/netinet/sctp_usrreq.c @@ -70,7 +70,7 @@ sctp_init(void) * the SB_MAX whichever is smaller for the send window. */ sb_max_adj = (u_long)((u_quad_t) (SB_MAX) * MCLBYTES / (MSIZE + MCLBYTES)); - sctp_sendspace = min((min(SB_MAX, sb_max_adj)), + sctp_sendspace = min(sb_max_adj, (((uint32_t) nmbclusters / 2) * SCTP_DEFAULT_MAXSEGMENT)); /* * Now for the recv window, should we take the same amount? or |