据我所知,没有getline()与文件描述符相同的libc ,而不是使用FILE *.
是否有(技术)原因?
我有一个存储在 Redis 中的令牌 (JWT) 后备列表,并希望让我网站的用户能够以 RESTful 方式将他们的令牌列入黑名单。
我可以:
/sessions/<token>使用 DELETE 方法构建路由/sessions/使用 DELETE 方法和请求正文中发送的令牌构建路由。第一个解决方案很简单,但令牌存储在服务器的日志和用户浏览器的历史记录中。
第二种解决方案似乎更好,但我不确定发送带有正文的 DELETE 请求是否违反了 HTTP RFC 的幂等性原则。
在这种情况下,最佳做法是什么?
Uncaught (in promise) TypeError: second argument must be an object当我运行以下代码时出现错误:
async function loadWasm(url) {
const fetchPromise = fetch(url)
const { module, instance } = await WebAssembly.instantiateStreaming(fetchPromise)
// [...]
}
loadWasm('http://localhost:3000/path/to/file.wasm')
Run Code Online (Sandbox Code Playgroud)
查看文档,它说WebAssembly.instantiateStreaming( importObject) 的第二个参数是可选的,所以我不明白为什么浏览器仍然强制它?
我已经在 Firefox 78.7.0esr(64 位)和 Chrome 88.0.4324.96(官方版本)(64 位)中对此进行了测试。如果它很重要,代码会在 ruby on Rails 6.1 应用程序中使用 webpack 5 进行转译。
更新:
我在 mdn 的 github 存储库上提出了一个问题,认为文档可能需要更新。到目前为止,文档似乎很好,所以这可能是一个实现问题。有待证实。
更新:
这既不是实施问题,也不是文档错误。我在下面的答案中发表了关于这个问题的结论。
我遇到过write()在远程关闭的客户端上使用服务器端不返回0的情况.
根据男子2 write:
成功时,返回写入的字节数(零表示没有写入).出错时,返回-1,并正确设置errno.
根据我的理解:当在远程关闭的套接字上使用read/ 时write,第一次尝试应该失败(因此返回0),并且下一次尝试应该触发断开的管道.但事实并非如此.write()就好像它在第一次尝试时成功发送数据一样,然后在下次尝试时我得到一个破损的管道.
我的问题是为什么?
我知道如何妥善处理破损的管道,这不是问题.我只是想了解为什么在这种情况下write不会返回0.
下面是我写的服务器代码.在客户端,我尝试了一个基本的C客户端(使用close()和shutdown()来关闭套接字)和netcat.这三个人给了我相同的结果.
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#define MY_STR "hello world!"
int start_server(int port)
{
int fd;
struct sockaddr_in sin;
fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd == -1)
{
perror(NULL);
return (-1);
}
memset(&sin, 0, sizeof(struct sockaddr_in));
sin.sin_addr.s_addr = htonl(INADDR_ANY);
sin.sin_family = AF_INET;
sin.sin_port = htons(port); …Run Code Online (Sandbox Code Playgroud) c ×2
broken-pipe ×1
getline ×1
http ×1
javascript ×1
jwt ×1
libc ×1
linux ×1
parameters ×1
posix ×1
sockets ×1
webassembly ×1