Tag: vxworks

如何限制客户端服务器程序中的连接数

我想要一个服务器程序,它应该只接受最多一个连接,它应该丢弃其他连接。 我怎样才能做到这一点?

VxWorks上strerror_r的最大消息大小

VxWorks提供了一个只有两个参数的strerror_r版本。 STATUS strerror_r ( int errcode, /* error number */ char *buffer /* string buffer */ ) cURL提到MAXERRSTR_SIZE 。 vxworks样式的strerror_r()确实使用我们传递给函数的缓冲区。 缓冲区大小至少应为rtsold.h中定义的MAXERRSTR_SIZE(150) 但我似乎无法在发行版的任何地方找到文件rtsold.h。 复制到缓冲区的消息的最大大小是多少? 是否在某处定义了#define或整数常量?

如何在vxworks或linux上取消阻止的read / recvfrom系统调用

在任务I中 : … while (1) { if (running == false) break; ret = read(fd, buf, size); /* Or: ret = recvfrom(sock, buf, size, 0, NULL, NULL); */ … } 在任务II中 : … running = true; /* ioctl(fd, FIOCANCEL, 0); */ close(fd); /* Or: close(sock);*/ 在任务II中应该做什么来取消被阻止的任务我 , 在vxworks中 ,有一个函数ioctl(fd, FIOCANCEL, 0)来取消阻塞的读取或写入,但它无法工作。 可能是因为司机不能支持“FIOCANCEL” 。 如何在vxworks和linux中编写任务II? 或者还有其他办法来完成我的任务吗?

常用于RTOS的设计模式(VXworks)

任何人都可以帮我解决RTOS常用的设计模式吗? 在VXworks中,哪种模式更可取?

为什么特定的UDP消息总是低于特定的缓冲区大小?

3个不同的消息以不同的速率发送到同一个端口: 消息 大小(字节) 发送每个 传输速度 高 232 10 ms 100Hz 中等 148 20ms 50Hz 低 20 60 ms 16.6Hz 我每隔约6毫秒只能处理一条消息。 单线程。 阻止阅读。 一种奇怪的情况正在发生,我没有解释。 当我将接收缓冲区设置为4,799字节时,我的所有低速消息都会被丢弃。 我看到可能有一两个被处理,然后什么都没有。 当我将接收缓冲区设置为4,800 (或更高!)时,似乎所有低速消息都开始被处理。 我看到大约每秒16/17。 这一点一直被观察到。 发送数据包的应用程序始终在接收应用程序之前启动。 创建套接字后,在开始处理之前,接收应用程序总是有很长的延迟。 因此,处理开始时缓冲区始终为满,并且每次测试发生时它都不是相同的起始缓冲区。 这是因为套接字是在发送方已经发送消息之后创建的,因此接收方可能会在发送周期的中间开始监听。 为什么增加单个字节的接收缓冲区大小会导致低速消息处理发生巨大变化? 我构建了一个表来更好地可视化预期的处理: 由于其中一些消息得到处理,因此可能会将更多消息放入队列而不是被丢弃。 尽管如此,我希望4,799字节缓冲区的行为与4,800字节相同。 然而,这不是我所观察到的。 我认为这个问题与低速消息与其他两条消息同时发送的事实有关。 它总是在高/中速信息之后接收。 (已通过wireshark确认)。 例如,假设缓冲区开始时为空,很明显低速消息需要比其他消息排队更长。 *每6ms 1条消息大约每30ms发送5条消息。 这仍然不能解释缓冲区大小。 我们正在运行VxWorks,并使用他们的sockLib,它是Berkeley套接字的一个实现。 这是我们的套接字创建的代码片段: 我正在改变SOCKET_BUFFER_SIZE 。 struct sockaddr_in tSocketAddress; // Socket address […]