2

谁能告诉我为什么下面的代码总是返回 0 。套接字描述符值为 3。我正在使用 open suse TFTP 服务器。它正在侦听本地主机的 69 端口。

connect() 函数返回成功..

   connection_timer.tv_sec = 2; // s
    connection_timer.tv_usec = 0; 

 FD_ZERO(&fd_reader);
    // laukiam, kol bus ka nuskaityti
    FD_SET(socket_descriptor, &fd_reader);

    int select_ready = select(socket_descriptor + 1, &fd_reader, NULL, NULL, &connection_timer); 

当我使用 TCPdump 检查它发送第一个数据包的数据包时,连接在收到 Ack 之前在某处关闭..

4

3 回答 3

2

在任何描述符变得有趣之前,您将获得计时器(在您的示例中)到期0select返回码。connection_timer

所以这不是错误。看来您很可能没有connection_timer正确初始化。

于 2011-08-21T13:01:25.753 回答
1

我怀疑您没有收到响应,因为您使用connect()了 UDP 套接字,这使得您只接受来自连接目的地的数据报。

由于 TFTP 回复不是来自端口 69,而是来自临时端口,因此永远不会收到确认。

connect()解决方案:在完成初始连接之前不要使用 UDP 套接字。

于 2011-08-21T19:05:12.890 回答
1

需要调用 WSAStartup 函数。我确实有同样的问题,在调用这个启动函数后得到了解决。

于 2012-04-25T17:59:19.077 回答