c - 将字符串传递给 kernel_sendmsg 时应该遵循什么格式?
问题描述
最近,我正在修改内核空间中的一些套接字程序。以下是基本的服务器发送功能:
static int http_server_send(struct socket *sock, const char *buf, size_t size)
{
struct msghdr msg = {.msg_name = NULL,
.msg_namelen = 0,
.msg_control = NULL,
.msg_controllen = 0,
.msg_flags = 0};
int done = 0;
while (done < size) {
struct kvec iov = {
.iov_base = (void *) ((char *) buf + done),
.iov_len = size - done,
};
int length = kernel_sendmsg(sock, &msg, &iov, 1, iov.iov_len);
if (length < 0) {
pr_err("write error: %d\n", length);
break;
}
done += length;
}
return done;
}
当它被传递时,我发现buf
或iov_base
遵循了一些特定的格式,格式就像定义为宏( CRLF 定义为 "\r\n" ):
"" \
"HTTP/1.1 200 OK" CRLF "Server: " KBUILD_MODNAME CRLF \
"Content-Type: text/plain" CRLF "Content-Length: %d" CRLF \
"Connection: Close" CRLF CRLF "%s" CRLF
上面的某些格式似乎无法更改(更改后将无法发送消息),也许这是一种协议。我的问题是有任何文件或参考资料可以找到这些格式的规定吗?
解决方案
推荐阅读
- android - 未解决的参考:ContextAmbient 在尝试从可组合函数中执行另一个活动时
- javascript - 如何将文件夹内的图像放入数组中
- javascript - 如何使用 konva.js 和 javascript 制作马赛克画笔
- docker - 无法构建 docker 容器:无法添加文件
to tar: io: 在封闭管道上读/写 - localhost - 您可以访问 localhost Web 应用程序的最大用户数是多少?
- python - 具有一列平均值的交叉表
- c++ - 如何在 MS ODBC 存储过程调用中检索多个命名输出参数
- android - Android Hilt Unresolved reference @Inject in Arctic Fox
- docker - 初始化 NVML 失败:驱动程序/库版本不匹配
- android - 删除 APK 中的文件而不使 APK/应用程序不可用