SCCS-vsn: sys/kern/uipc_usrreq.c 7.6
SCCS-vsn: sys/netinet/tcp_usrreq.c 7.9
SCCS-vsn: sys/netns/spp_usrreq.c 7.7
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
*
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
*
- * @(#)uipc_usrreq.c 7.5 (Berkeley) %G%
+ * @(#)uipc_usrreq.c 7.6 (Berkeley) %G%
* be large enough for at least one max-size datagram plus address.
*/
#define PIPSIZ 4096
* be large enough for at least one max-size datagram plus address.
*/
#define PIPSIZ 4096
-int unpst_sendspace = PIPSIZ;
-int unpst_recvspace = PIPSIZ;
-int unpdg_sendspace = 2*1024; /* really max datagram size */
-int unpdg_recvspace = 4*1024;
+u_long unpst_sendspace = PIPSIZ;
+u_long unpst_recvspace = PIPSIZ;
+u_long unpdg_sendspace = 2*1024; /* really max datagram size */
+u_long unpdg_recvspace = 4*1024;
int unp_rights; /* file descriptors in flight */
int unp_rights; /* file descriptors in flight */
register struct unpcb *unp;
int error;
register struct unpcb *unp;
int error;
+ if (so->so_snd.sb_hiwat == 0 || so->so_rcv.sb_hiwat == 0) {
+ switch (so->so_type) {
- case SOCK_STREAM:
- error = soreserve(so, unpst_sendspace, unpst_recvspace);
- break;
+ case SOCK_STREAM:
+ error = soreserve(so, unpst_sendspace, unpst_recvspace);
+ break;
- case SOCK_DGRAM:
- error = soreserve(so, unpdg_sendspace, unpdg_recvspace);
- break;
+ case SOCK_DGRAM:
+ error = soreserve(so, unpdg_sendspace, unpdg_recvspace);
+ break;
+ }
+ if (error)
+ return (error);
- if (error)
- return (error);
m = m_getclr(M_DONTWAIT, MT_PCB);
if (m == NULL)
return (ENOBUFS);
m = m_getclr(M_DONTWAIT, MT_PCB);
if (m == NULL)
return (ENOBUFS);
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
*
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
*
- * @(#)tcp_usrreq.c 7.7.1.2 (Berkeley) %G%
+ * @(#)tcp_usrreq.c 7.9 (Berkeley) %G%
-int tcp_sendspace = 1024*4;
-int tcp_recvspace = 1024*4;
+u_long tcp_sendspace = 1024*4;
+u_long tcp_recvspace = 1024*4;
/*
* Attach TCP protocol to socket, allocating
* internet protocol control block, tcp control block,
/*
* Attach TCP protocol to socket, allocating
* internet protocol control block, tcp control block,
struct inpcb *inp;
int error;
struct inpcb *inp;
int error;
- error = soreserve(so, tcp_sendspace, tcp_recvspace);
- if (error)
- return (error);
+ if (so->so_snd.sb_hiwat == 0 || so->so_rcv.sb_hiwat == 0) {
+ error = soreserve(so, tcp_sendspace, tcp_recvspace);
+ if (error)
+ return (error);
+ }
error = in_pcballoc(so, &tcb);
if (error)
return (error);
error = in_pcballoc(so, &tcb);
if (error)
return (error);
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
*
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
*
- * @(#)spp_usrreq.c 7.6 (Berkeley) %G%
+ * @(#)spp_usrreq.c 7.7 (Berkeley) %G%
}
if (so->so_options & SO_ACCEPTCONN) {
struct sppcb *ocb = cb;
}
if (so->so_options & SO_ACCEPTCONN) {
struct sppcb *ocb = cb;
- struct socket *oso = so;
so = sonewconn(so);
if (so == 0) {
goto drop;
so = sonewconn(so);
if (so == 0) {
goto drop;
cb = nstosppcb(nsp);
cb->s_mtu = ocb->s_mtu; /* preserve sockopts */
cb->s_flags = ocb->s_flags; /* preserve sockopts */
cb = nstosppcb(nsp);
cb->s_mtu = ocb->s_mtu; /* preserve sockopts */
cb->s_flags = ocb->s_flags; /* preserve sockopts */
- if (so->so_snd.sb_hiwat != oso->so_snd.sb_hiwat) /*XXX*/
- sbreserve(&so->so_snd, oso->so_snd.sb_hiwat);
- if (so->so_rcv.sb_hiwat != oso->so_rcv.sb_hiwat) /*XXX*/
- sbreserve(&so->so_rcv, oso->so_rcv.sb_hiwat);
cb->s_state = TCPS_LISTEN;
}
cb->s_state = TCPS_LISTEN;
}
int len = 0, win, rcv_win;
short span, off;
u_short alo;
int len = 0, win, rcv_win;
short span, off;
u_short alo;
- int error = 0, idle, sendalot;
+ int error = 0, sendalot;
+#ifdef notdef
+ int idle;
+#endif
struct mbuf *mprev;
extern int idpcksum;
struct mbuf *mprev;
extern int idpcksum;
sbappendrecord(sb, m);
cb->s_seq++;
}
sbappendrecord(sb, m);
cb->s_seq++;
}
idle = (cb->s_smax == (cb->s_rack - 1));
idle = (cb->s_smax == (cb->s_rack - 1));
again:
sendalot = 0;
off = cb->s_snxt - cb->s_rack;
again:
sendalot = 0;
off = cb->s_snxt - cb->s_rack;
error = ns_pcballoc(so, &nspcb);
if (error)
break;
error = ns_pcballoc(so, &nspcb);
if (error)
break;
- error = soreserve(so, 3072, 3072);
- if (error)
- break;
+ if (so->so_snd.sb_hiwat == 0 || so->so_rcv.sb_hiwat == 0) {
+ error = soreserve(so, (u_long) 3072, (u_long) 3072);
+ if (error)
+ break;
+ }
nsp = sotonspcb(so);
mm = m_getclr(M_DONTWAIT, MT_PCB);
nsp = sotonspcb(so);
mm = m_getclr(M_DONTWAIT, MT_PCB);
cb = mtod(mm, struct sppcb *);
mm = m_getclr(M_DONTWAIT, MT_HEADER);
if (mm == NULL) {
cb = mtod(mm, struct sppcb *);
mm = m_getclr(M_DONTWAIT, MT_HEADER);
if (mm == NULL) {
+ (void) m_free(dtom(m));
error = ENOBUFS;
break;
}
error = ENOBUFS;
break;
}