首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libuv tcp连接问题

libuv tcp连接问题
EN

Stack Overflow用户
提问于 2014-03-29 22:45:05
回答 3查看 1.6K关注 0票数 0

我有以下代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include "uv.h"

int64_t counter = 0;

void on_new_connection(uv_stream_t *server, int status);

int main(void)
{
    uv_tcp_t server;
    uv_tcp_init(uv_default_loop(), &server);

    struct sockaddr_in socket;

    uv_ip4_addr("127.0.0.1", 7000, &socket);
    uv_tcp_bind(&server, (struct sockaddr *) &socket, 42);
    int r = uv_listen((uv_stream_t*) &server, 128,
            on_new_connection);
    if (r) {
        fprintf(stderr, "Listen error\n");
        return 1;
    }

    return uv_run(uv_default_loop(), UV_RUN_DEFAULT);
}

void on_new_connection(uv_stream_t *server, int status)
{
    printf("new connection\n");

    if (status == -1) {
        return;
    }

    uv_tcp_t *client = malloc(sizeof(uv_tcp_t));
    uv_tcp_init(uv_default_loop(), client);
//  if (uv_accept(server, (uv_stream_t*) client) == 0) {
//      uv_read_start((uv_stream_t*) client, alloc_buffer, echo_read);
//  }
//  else {
//      uv_close((uv_handle_t*) client, NULL);
//  }
}

我只想启动这台服务器并(通过telnet或浏览器)连接到这台服务器。看起来一切正常,除了第一个连接总是在on_new_connection中打印“新连接”字符串,但是我启动的任何新的远程登录会话都不打印新的连接。我遗漏了什么?on_new_connection回调似乎只调用了一次,为什么?

EN

回答 3

Stack Overflow用户

发布于 2014-04-29 12:34:13

为什么要在调用uv_accept()时注释掉代码?在连接回调中,用户必须调用uv_accept()来接受挂起的连接。然后在该调用之后恢复服务器i/o监视器。在您的情况下,监视器不会恢复。这就是您观察到单个回调的原因。

票数 1
EN

Stack Overflow用户

发布于 2014-03-30 00:33:53

可能是您没有使用telnet指定正确的端口?

telnet 127.0.0.1 7000

票数 0
EN

Stack Overflow用户

发布于 2014-04-29 12:38:24

您也没有检查状态值。您总是得到回调,但是您不知道这是不是某种错误

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22732511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档