kern_sosend 内核服务
用途
将数据和控制信息传递到与协议关联的发送例程。
语法
参数
| 项 | 描述 |
|---|---|
| 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 文件中定义的错误号。