c - C 套接字:什么会导致接受函数返回 -1
问题描述
这是代码。
char *httpHeader = "HTTP/1.1 200 OK\r\n\n";
/* poll the server for requests */
int client;
for (;;) {
client = accept(sock, NULL, NULL);
if (send(client, httpHeader, sizeof(httpHeader), 0) < 0)
perror("Error");
else
printf ("packet send done");
}
我知道该服务器正在运行和初始化,当我尝试通过浏览器上的 localhost 打开它时,它只是坐在那里加载,但没有任何反应......
解决方案
...当我尝试通过浏览器上的 localhost 打开它时,它只是坐在那里加载,但没有任何反应...
这accept
与标题中声称的返回 -1 不同。您根本不会关闭套接字,也不会发送有效的 HTTP 响应,因为您使用sizeof(httpHeader)
了要发送的长度。但sizeof(httpHeader)
不是(略微无效)标头的长度,而是sizeof(char*)
,即您仅发送 8 个字节(在 64 位上)。
C 套接字:什么会导致接受函数返回 -1
通常情况下,服务器套接字以某种方式无效或客户端在accept
返回用户空间之前关闭了套接字(连接在操作系统内核内完成)。检查errno
您的具体情况的详细信息。请注意,errno
or仅在实际返回 -1perror
时才有用。accept
推荐阅读
- r - 如何使用 R 设置通用因子
- php - 从 pg_database_size 返回的结果不正确
- java - 当图像视图具有焦点时如何获得边框?
- sql-server - 使用 group by 将序列号添加到现有表的每列
- javascript - electron.ipcMain 的奇怪行为
- flutter - 如何让视频在不拉伸的情况下填满屏幕(使用 Chewie 或类似工具)?
- reactjs - 变量在反应事件总线上没有得到正确的值
- python - 使用 Python 通过 Linux 服务器将 pandas 写入 SQL Server
- google-cloud-platform - 如何将 pyspark ml 代码运行到 gcp 集群中?
- vue.js - API 需要设置用户代理,但它在 chrome 中是不安全的标头