summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/uipc_socket.c')
-rw-r--r--sys/kern/uipc_socket.c38
1 files changed, 16 insertions, 22 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 8c1319a..8a554d0 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)uipc_socket.c 8.3 (Berkeley) 4/15/94
- * $Id: uipc_socket.c,v 1.26 1997/04/27 20:00:44 wollman Exp $
+ * $Id: uipc_socket.c,v 1.27 1997/06/27 15:28:54 peter Exp $
*/
#include <sys/param.h>
@@ -101,7 +101,7 @@ socreate(dom, aso, type, proto, p)
int
sobind(so, nam, p)
struct socket *so;
- struct mbuf *nam;
+ struct sockaddr *nam;
struct proc *p;
{
int s = splnet();
@@ -233,7 +233,7 @@ soabort(so)
int
soaccept(so, nam)
register struct socket *so;
- struct mbuf *nam;
+ struct sockaddr **nam;
{
int s = splnet();
int error;
@@ -249,7 +249,7 @@ soaccept(so, nam)
int
soconnect(so, nam, p)
register struct socket *so;
- struct mbuf *nam;
+ struct sockaddr *nam;
struct proc *p;
{
int s;
@@ -327,15 +327,15 @@ bad:
* Data and control buffers are freed on return.
*/
int
-sosend(so, addr, uio, top, control, flags)
+sosend(so, addr, uio, top, control, flags, p)
register struct socket *so;
- struct mbuf *addr;
+ struct sockaddr *addr;
struct uio *uio;
struct mbuf *top;
struct mbuf *control;
int flags;
+ struct proc *p;
{
- struct proc *p = curproc; /* XXX */
struct mbuf **mp;
register struct mbuf *m;
register long space, len, resid;
@@ -512,9 +512,9 @@ out:
* only for the count in uio_resid.
*/
int
-soreceive(so, paddr, uio, mp0, controlp, flagsp)
+soreceive(so, psa, uio, mp0, controlp, flagsp)
register struct socket *so;
- struct mbuf **paddr;
+ struct sockaddr **psa;
struct uio *uio;
struct mbuf **mp0;
struct mbuf **controlp;
@@ -528,8 +528,8 @@ soreceive(so, paddr, uio, mp0, controlp, flagsp)
int orig_resid = uio->uio_resid;
mp = mp0;
- if (paddr)
- *paddr = 0;
+ if (psa)
+ *psa = 0;
if (controlp)
*controlp = 0;
if (flagsp)
@@ -630,21 +630,15 @@ dontblock:
panic("receive 1a");
#endif
orig_resid = 0;
+ if (psa)
+ *psa = dup_sockaddr(mtod(m, struct sockaddr *),
+ mp0 == 0);
if (flags & MSG_PEEK) {
- if (paddr)
- *paddr = m_copy(m, 0, m->m_len);
m = m->m_next;
} else {
sbfree(&so->so_rcv, m);
- if (paddr) {
- *paddr = m;
- so->so_rcv.sb_mb = m->m_next;
- m->m_next = 0;
- m = so->so_rcv.sb_mb;
- } else {
- MFREE(m, so->so_rcv.sb_mb);
- m = so->so_rcv.sb_mb;
- }
+ MFREE(m, so->so_rcv.sb_mb);
+ m = so->so_rcv.sb_mb;
}
}
while (m && m->m_type == MT_CONTROL && error == 0) {
OpenPOWER on IntegriCloud