2014-03-29 53 views
0

我有以下代码:libuv TCP连接问题

#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中的“新连接”字符串,但我启动的任何新的telnet会话都不会打印新连接,一切似乎都正常。 我错过了什么?看起来on_new_connection回调只被调用一次,为什么?

回答

0

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

的telnet 127.0.0.1 7000

1

你为什么注释掉与调用uv_accept()的代码?在连接回拨中,用户必须呼叫uv_accept()才能接受挂起的连接。此通话后,服务器I/O监视器将恢复。在你的情况下,观察者不会恢复。这就是为什么你观察到一个回调。

0

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