kern_sosend 内核服务

用途

将数据和控制信息传递到与协议关联的发送例程。

语法

#include <sys/kern_socket.h>
int  kern_sosend( ksocket_t  so, struct sockaddr *faddr, 
struct mbuf *top, 
struct mbuf *control, 
int flags )

参数

描述
so 用于发送数据的套接字。
费德尔 目标地址,仅当未连接套接字时才需要。
top 要发送的数据的 姆布夫 链。 请记住,前 姆布夫 个包头必须已填充。 将 top->m_pkthdr.len 设置为 mbuf 链中数据的总长度,并将 m_flags 设置为 M_PKTHDR。 在调用例程之前,调用者必须分配 姆布夫 内存。
control 指向包含要发送的控制信息的 姆布夫 的指针。 如果调用者要传递控制信息,那么调用者在调用函数之前必须分配 姆布夫 内存。
标志 标记此写调用的选项。 调用者可以将标志设置为 MSG_NONBLOCK

描述

kern_sosend 内核服务将数据和控制信息传递到与协议关联的发送例程。

执行环境

可以从进程环境中调用 kern_sosend 内核服务。

示例

ksocket_t  so;
int flags = 0;
struct sockaddr_in faddr;
struct mbuf *send_mbuf;
struct sockaddr_in  faddr;
char		 msg[100];
int		   i, rc;
rc = kern_socreate(AF_INET, &so, SOCK_STREAM, IPPROTO_TCP);
if (rc != 0 )  		 
{ 		 		 
		  return(-1); 		 
}		   		 
bzero(&faddr, sizeof(struct sockaddr_in)); 		 
faddr.sin_family = AF_INET; 		 
faddr.sin_port = 23456; 		 
faddr.sin_len = sizeof(struct sockaddr_in); 		 
faddr.sin_addr.s_addr = inet_addr("9.3.108.210"); 		 
rc = kern_soconnect(so, (struct sockaddr *) &faddr); 		 
if (rc != 0 )  		 
{ 		 		 
      return(-1); 		 
}  		 
send_mbuf = MGETBUF(sizeof(msg), M_DONOTWAIT); /* Caller needs to allocate mbuf memory */ 		 
if (send_mbuf == NULL)
{         		 
     return (-1);     		 
}		 		   		 
for (i=0; i < 100, i++) 		 
{ 		 		 
         msg[i] = 0x2A; 		 
}		 		  		 
bcopy(msg, mtod(send_mbuf, caddr_t), sizeof(msg)); 		 
send_mbuf->m_len = send_mbuf->m_pkthdr.len = sizeof(msg);		   		 
rc = kern_sosend(so, NULL, send_mbuf, 0, MSG_NONBLOCK)); 		 
if (rc != 0 )  		 
{ 		 		 
     return(-1); 		 
}  

返回值

描述
重大安全事件数量 成功时
>0 错误

非零返回值是在 /usr/include/sys/errno.h 文件中定义的错误号。