2014-03-29 52 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

您還沒有檢查狀態值。你總是得到回調,但你不知道這是否是某種錯誤