选择()对我不起作用
Select() not working for me
我有一个问题,当我可以在服务器端读取接收到的数据时,我使用select
函数来等待,但它工作错误,就像我什么也没收到并且超时过去一样。
服务器端代码:
int fd = accept(sockfd, addr, addrlen);
if(fd > 0)
{
struct timeval tv;
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
// wait when i can read data
int ret_select = select(1, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);
if(ret_select > 0)
{
// data ready to be readed. NEVER HERE!
}
else
{
// nothing. ALWAYS HERE
}
}
客户端:
int ret = connect(s, name, namelen);
if(ret == 0)
{
struct timeval tv;
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(s, &rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
// wait when we can write
int ret_select = select(1, (fd_set *) 0, &rfds, (fd_set *) 0, &tv);
if(ret_select > 0)
{
int sended = send(s, my_data, size_data, 0);
if(sended > 0)
{
// all ok, data sended!
}
}
}
但是如果我删除服务器端调用select
- 一切都可以,要读取的数据是存在的,所以我想select
在我的代码中工作错误!
我的代码有什么问题?
谢谢!
select()
的第一个参数不是集合中文件描述符的数量。是的:
NFDS 是三个集合中编号最高的文件描述符,加上 1。
因此,除非您的套接字文件描述符是数字 0,否则您的参数 1 是错误的。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 使用选择排序对数组数据结构进行排序,但它不起作用
- c++ 选择排序在特定情况下不起作用
- 为什么当我选择>250000个采样点时,程序不起作用?
- QClipboard的信号选择已更改在Windows 7中不起作用
- 当中间元素选择为枢轴时,快速排序C 不起作用
- 选择在 Sqlite 数据库中有效,但插入和更新语句不起作用
- 选择()对我不起作用
- 剪贴板选择传输不起作用
- 选择和移动事件在QGraphicsScene中不起作用