Sets the option associated with the socket, either at the socket level or at the protocol level.
| Item | Description | 
|---|---|
| so | The socket that will be used to set the option. | 
| level | The socket level (e.g. SOL_SOCKET) or protocol level (IPPROTO_TCP) | 
| optname | The option name to set. Socket options can be found in <sys/socket.h> and the TCP options can be found in <netinet/tcp.h>. | 
| mp | The mbuf that contains the option value and will be used to modify the field specified by the option name. The mp->m_len should be the size of the value. The caller must allocate mbuf memory before calling the function. | 
The kern_sosettopt kernel service sets the option associated with the socket, either at the socket level, or at the protocol level.
The kern_sosetopt kernel service can be called from the process environment.
ksocket_t    so;
struct mbuf *mp = NULL;
struct linger *linger;
int rc;
rc = kern_socreate(AF_INET, &so, SOCK_STREAM, IPPROTO_TCP); 		 
if (rc != 0 )  		 
{ 		 		 
       return(-1); 		 
}  		 
mp = m_get(M_DONTWAIT, MT_SOOPTS); /* Caller of kern_sosetopt needs to allocated mbuf  memory */ 		 
if (mp == NULL) 		 
{         		 
       return (-1);     		 
}		 		   		 
mp->m_len = sizeof(struct linger); 		 
linger = mtod(mp, struct linger *); 		 
linger->l_linger = 5; 		 
linger->l_onoff = 1; 		 
rc = kern_sosetopt(so, SOL_SOCKET, SO_LINGER, mp); 		 
if (rc != 0 )  		 
{ 		 		 
       return(-1); 		 
}
| Item | Description | 
|---|---|
| 0 | Upon Success | 
| >0 | Error | 
The nonzero return value is the error number that is defined in the /usr/include/sys/errno.h file.