【问题标题】:Error:Socket Select() function always return zero..?错误:Socket Select() 函数总是返回零..?
【发布时间】:2011-08-21 12:58:30
【问题描述】:

谁能告诉我为什么下面的代码总是返回 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 之前在某处关闭..

【问题讨论】:

    标签: c sockets udpclient


    【解决方案1】:

    你会从select得到一个0的返回码,它的计时器(在你的例子中是connection_timer)在任何描述符变得有趣之前到期。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-08-27
          • 1970-01-01
          • 2012-12-02
          • 1970-01-01
          • 2012-01-08
          • 1970-01-01
          • 2019-11-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多