| version 1.27, 1997/06/11 10:04:09 |
version 1.28, 1997/06/24 20:04:45 |
| Line 887 sosetopt(so, level, optname, m0) |
|
| Line 887 sosetopt(so, level, optname, m0) |
|
| case SO_RCVBUF: |
case SO_RCVBUF: |
| case SO_SNDLOWAT: |
case SO_SNDLOWAT: |
| case SO_RCVLOWAT: |
case SO_RCVLOWAT: |
| |
{ |
| |
int optval; |
| |
|
| if (m == NULL || m->m_len < sizeof (int)) { |
if (m == NULL || m->m_len < sizeof (int)) { |
| error = EINVAL; |
error = EINVAL; |
| goto bad; |
goto bad; |
| } |
} |
| |
|
| |
/* |
| |
* Values < 1 make no sense for any of these |
| |
* options, so disallow them. |
| |
*/ |
| |
optval = *mtod(m, int *); |
| |
if (optval < 1) { |
| |
error = EINVAL; |
| |
goto bad; |
| |
} |
| |
|
| switch (optname) { |
switch (optname) { |
| |
|
| case SO_SNDBUF: |
case SO_SNDBUF: |
| case SO_RCVBUF: |
case SO_RCVBUF: |
| if (sbreserve(optname == SO_SNDBUF ? |
if (sbreserve(optname == SO_SNDBUF ? |
| &so->so_snd : &so->so_rcv, |
&so->so_snd : &so->so_rcv, |
| (u_long) *mtod(m, int *)) == 0) { |
(u_long) optval) == 0) { |
| error = ENOBUFS; |
error = ENOBUFS; |
| goto bad; |
goto bad; |
| } |
} |
| break; |
break; |
| |
|
| |
/* |
| |
* Make sure the low-water is never greater than |
| |
* the high-water. |
| |
*/ |
| case SO_SNDLOWAT: |
case SO_SNDLOWAT: |
| so->so_snd.sb_lowat = *mtod(m, int *); |
so->so_snd.sb_lowat = |
| |
(optval > so->so_snd.sb_hiwat) ? |
| |
so->so_snd.sb_hiwat : optval; |
| break; |
break; |
| case SO_RCVLOWAT: |
case SO_RCVLOWAT: |
| so->so_rcv.sb_lowat = *mtod(m, int *); |
so->so_rcv.sb_lowat = |
| |
(optval > so->so_rcv.sb_hiwat) ? |
| |
so->so_rcv.sb_hiwat : optval; |
| break; |
break; |
| } |
} |
| break; |
break; |
| |
} |
| |
|
| case SO_SNDTIMEO: |
case SO_SNDTIMEO: |
| case SO_RCVTIMEO: |
case SO_RCVTIMEO: |