错误:Socket Select()函数总是返回零..?

时间:2011-08-21 12:58:30

标签: c sockets udpclient

任何人都可以告诉我为什么下面的代码总是返回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之前在某处关闭连接..

3 个答案:

答案 0 :(得分:2)

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

所以这不是错误。似乎很可能您未正确初始化connection_timer

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

需要调用WSAStartup函数。 我有同样的问题,并在调用此启动函数后得到解决。