Недавно я модифицировал некоторые программы сокетов в пространстве ядра. Ниже приводится базовая c функция отправки на сервер:
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
, следуя некоторому заданному формату c, когда он был передан, формат похож на следующий, который определяется как макрос (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
Некоторые из вышеуказанного формата, кажется, не могут быть изменены (Изменено не удастся отправить сообщение), возможно, это своего рода протокол. Мой вопрос: есть ли какой-либо документ или ссылка, могу ли я найти регламент этого формата?