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, 25 insertions, 13 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index ed09ee6..b50b263 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -31,6 +31,7 @@
* SUCH DAMAGE.
*
* @(#)uipc_socket.c 8.3 (Berkeley) 4/15/94
+ * $Id$
*/
#include <sys/param.h>
@@ -46,6 +47,9 @@
#include <sys/socketvar.h>
#include <sys/resourcevar.h>
+void sofree __P((struct socket *));
+void sorflush __P((struct socket *));
+
/*
* Socket operation routines.
* These routines are called by the routines in
@@ -54,6 +58,7 @@
* switching out to the protocol specific routines.
*/
/*ARGSUSED*/
+int
socreate(dom, aso, type, proto)
int dom;
struct socket **aso;
@@ -91,6 +96,7 @@ socreate(dom, aso, type, proto)
return (0);
}
+int
sobind(so, nam)
struct socket *so;
struct mbuf *nam;
@@ -105,6 +111,7 @@ sobind(so, nam)
return (error);
}
+int
solisten(so, backlog)
register struct socket *so;
int backlog;
@@ -127,6 +134,7 @@ solisten(so, backlog)
return (0);
}
+void
sofree(so)
register struct socket *so;
{
@@ -148,6 +156,7 @@ sofree(so)
* Initiate disconnect if connected.
* Free socket when disconnect complete.
*/
+int
soclose(so)
register struct socket *so;
{
@@ -198,6 +207,7 @@ discard:
/*
* Must be called at splnet...
*/
+int
soabort(so)
struct socket *so;
{
@@ -207,6 +217,7 @@ soabort(so)
(struct mbuf *)0, (struct mbuf *)0, (struct mbuf *)0));
}
+int
soaccept(so, nam)
register struct socket *so;
struct mbuf *nam;
@@ -223,6 +234,7 @@ soaccept(so, nam)
return (error);
}
+int
soconnect(so, nam)
register struct socket *so;
struct mbuf *nam;
@@ -250,6 +262,7 @@ soconnect(so, nam)
return (error);
}
+int
soconnect2(so1, so2)
register struct socket *so1;
struct socket *so2;
@@ -263,6 +276,7 @@ soconnect2(so1, so2)
return (error);
}
+int
sodisconnect(so)
register struct socket *so;
{
@@ -302,6 +316,7 @@ bad:
* must check for short counts if EINTR/ERESTART are returned.
* Data and control buffers are freed on return.
*/
+int
sosend(so, addr, uio, top, control, flags)
register struct socket *so;
struct mbuf *addr;
@@ -393,25 +408,15 @@ restart:
MGET(m, M_WAIT, MT_DATA);
mlen = MLEN;
}
- if (resid >= MINCLSIZE && space >= MCLBYTES) {
+ if (resid >= MINCLSIZE) {
MCLGET(m, M_WAIT);
if ((m->m_flags & M_EXT) == 0)
goto nopages;
mlen = MCLBYTES;
-#ifdef MAPPED_MBUFS
- len = min(MCLBYTES, resid);
-#else
- if (atomic && top == 0) {
- len = min(MCLBYTES - max_hdr, resid);
- m->m_data += max_hdr;
- } else
- len = min(MCLBYTES, resid);
-#endif
- space -= MCLBYTES;
+ len = min(min(mlen, resid), space);
} else {
nopages:
len = min(min(mlen, resid), space);
- space -= len;
/*
* For datagram protocols, leave room
* for protocol headers in first mbuf.
@@ -419,6 +424,7 @@ nopages:
if (atomic && top == 0 && len < mlen)
MH_ALIGN(m, len);
}
+ space -= len;
error = uiomove(mtod(m, caddr_t), (int)len, uio);
resid = uio->uio_resid;
m->m_len = len;
@@ -477,6 +483,7 @@ out:
* an mbuf **mp0 for use in returning the chain. The uio is then used
* only for the count in uio_resid.
*/
+int
soreceive(so, paddr, uio, mp0, controlp, flagsp)
register struct socket *so;
struct mbuf **paddr;
@@ -489,7 +496,7 @@ soreceive(so, paddr, uio, mp0, controlp, flagsp)
register int flags, len, error, s, offset;
struct protosw *pr = so->so_proto;
struct mbuf *nextrecord;
- int moff, type;
+ int moff, type = 0;
int orig_resid = uio->uio_resid;
mp = mp0;
@@ -775,6 +782,7 @@ release:
return (error);
}
+int
soshutdown(so, how)
register struct socket *so;
register int how;
@@ -790,6 +798,7 @@ soshutdown(so, how)
return (0);
}
+void
sorflush(so)
register struct socket *so;
{
@@ -811,6 +820,7 @@ sorflush(so)
sbrelease(&asb);
}
+int
sosetopt(so, level, optname, m0)
register struct socket *so;
int level, optname;
@@ -927,6 +937,7 @@ bad:
return (error);
}
+int
sogetopt(so, level, optname, mp)
register struct socket *so;
int level, optname;
@@ -1011,6 +1022,7 @@ sogetopt(so, level, optname, mp)
}
}
+void
sohasoutofband(so)
register struct socket *so;
{
OpenPOWER on IntegriCloud