任何人都可以告诉我为什么下面的代码总是返回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之前在某处关闭连接..
答案 0 :(得分:2)
在任何描述符变得有趣之前,您将从0
获得select
的返回码,其中计时器(示例中为connection_timer
)到期。
所以这不是错误。似乎很可能您未正确初始化connection_timer
。
答案 1 :(得分:1)
我怀疑您没有收到响应,因为您在UDP套接字上使用了connect()
,这使得您只接受来自连接目标的数据报。
由于TFTP回复不是来自端口69,而是来自短暂端口,因此永远不会收到确认。
解决方案:在完成初始连接之前,请不要connect()
您的UDP套接字。
答案 2 :(得分:1)
需要调用WSAStartup函数。 我有同样的问题,并在调用此启动函数后得到解决。