工具/软件:TI-RTOS
我一直在尝试调试 TCP 套接字出现的问题、似乎它们没有被阻止。
为了将问题固定下来、我重新安装了 TI-RTOS 2.16.1.14并导入了 tcpEcho 演示、并进行了极少的修改以重现问题。
请注意、实际的演示程序在无限循环中运行、返回0字节、占用可用的 CPU 周期、直到数据在套接字上。 BSD 套接字(它正在使用它)应阻止、直到套接字上有数据、发生超时或错误(设置了 errno)。 为了重现问题,我修改了 tcpWorker()子例程,如下所示:
空 tcpWorker (UARg arg0、UARg arg1) {
int clientfd =(int) arg0;
int bytesRcvd;
int bytesSent;
char buffer[TCPPACKETSIZE];
int notdone = true;
System_printf ("tcpWorker:start clientfd = 0x%x\n"、clientfd);
while (notdone){
//应阻止直到 TCPPACKETSIZE 字节被接收或错误。
bytesRcvd = recv (clientfd、buffer、TCPPACKETSIZE、MSG_WAITALL);
System_printf ("已接收%d 个字节。 errno =%d.\n"、bytesRcvd、errno);
System_flush ();
字节 Sent = SEND (clientfd、buffer、字节 Rcvd、0);
if (bytesSent < 0 || bytesSent!= bytesRcvd){
System_printf ("错误:发送失败。\n");
中断;
}
}
system_printf ("tcpWorker stop clientfd = 0x%x\n"、clientfd);
system_flush();
close (clientfd);
}
即使我指定 MSG_WAITALL (我也尝试不使用),recv()也会继续返回0个字节,但未设置错误。
我以前曾尝试报告过问题、但没有得到任何有用的回答、因此我再次尝试。
谢谢、
-Gary Brack
