首页 > 解决方案 > 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 打开它时,它只是坐在那里加载,但没有任何反应......

标签: csockets

解决方案


...当我尝试通过浏览器上的 localhost 打开它时,它只是坐在那里加载,但没有任何反应...

accept与标题中声称的返回 -1 不同。您根本不会关闭套接字,也不会发送有效的 HTTP 响应,因为您使用sizeof(httpHeader)了要发送的长度。但sizeof(httpHeader)不是(略微无效)标头的长度,而是sizeof(char*),即您仅发送 8 个字节(在 64 位上)。

C 套接字:什么会导致接受函数返回 -1

通常情况下,服务器套接字以某种方式无效或客户端在accept返回用户空间之前关闭了套接字(连接在操作系统内核内完成)。检查errno您的具体情况的详细信息。请注意,errnoor仅在实际返回 -1perror时才有用。accept


推荐阅读