TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320DM648-NDK开发传输数据-send函数异常退出问题

硬件:TMS320DM648

软件:CCS5.4 NDK2.0.0

问题描述:在使用TCP/IP协议栈的时候,创建socket后,循环使用send函数持续发送数据。但是发送过一段时间后send函数返回错误并退出,错误类型为EWOULDBLOCK,请问这种错误是因为什么导致的(内存不够?),以及怎么解决?

1. Socket配置代码:

// Create the main TCP socket
stcp = socket(AF_INET, SOCK_STREAM, 0);
if( stcp == INVALID_SOCKET )
{
	printf("Fail socket, %d\n", fdError());
	goto leave;
}

// Set Pmort = 9528, IP address = IPAddrSend
IPAddr = inet_addr(RemoteIPAddr);
bzero( &sin1, sizeof(struct sockaddr_in) );
sin1.sin_family = AF_INET;
sin1.sin_len= sizeof( sin1 );
sin1.sin_addr.s_addr = IPAddr;
sin1.sin_port= htons(9528);

to.tv_sec  = 5;
to.tv_usec = 0;
setsockopt( stcp, SOL_SOCKET, SO_SNDTIMEO, &to, sizeof( to ) );
setsockopt( stcp, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof( to ) );

uart_write("connect to the server:");uart_write(RemoteIPAddr);
while(connect( stcp, (PSA) &sin1, sizeof(sin1) ) < 0)
{
	printf("Fail connect, %d\n", fdError());
}
uart_write("Success!\n");

2. Send任务

while(1)
{
	if( ((bytes = send( stcp, pBuf , (int)FRAME_SIZE, 0 )) < 0) )
	{
		printf("send failed (%d)\n",fdError());
		goto leave;
	}
	if(FRAME_SIZE != bytes)
	{
		printf("send bytes (%d)\n",bytes);
	}
	totalBytes += bytes;

	// Get TSK_idle time to compute CPU load half-way through
	// number of packets transfers
	if ( loop == count)
	{
		THRLOAD_getTskTime(&TSK_idle, &tskTime, &totalTime);
	}

}

3. 发送任务出错执行的代码段: (send(…)函数内 –> SockSend(….)函数内)

// Check blocking condition
if( SizeCopy < size && !AddCopy )
{// We need to block (protocol did not handle the data )// Can't block a non-blocking socket// If we timeout, we have an error and break the loopif( (ps->StateFlags & SS_NBIO) || (flags & MSG_DONTWAIT) ||!FdWaitEvent( ps, FD_EVENT_WRITE, ps->TxTimeout ) ){error = EWOULDBLOCK;break;}
}

就是在int SockSend( HANDLE   h, char     *pBuf, INT32    size, int      flags, INT32    *pRetSize )函数中(在sock.c文件),这个函数我的理解是:先检查发送缓冲区是否有空间然后进行数据copy。如果没有空间就进入到上述3中的代码段阻塞等待……如果超时就报错退出,如果产生了可以写的事件则继续copy数据去发送。

注:在发送时出现上述错误退出后,使用的NDK库并没有关闭socket,并且客户端再也无法通过套接字连接DSP了

Yong Zhang10:

这论坛都没人的吗?好冷清

Shine:

回复 Yong Zhang10:

试试把buffer size减小。

Yong Zhang10:

回复 Shine:

Hi, Shine

您这里说的buffer size是下图里面的这个大小吗

我们发送缓冲区设置的是65535,这个大小太大了吗? 那多小算小,我们传输实时图像的话设置到多少算合适

Tony Tang:

回复 Yong Zhang10:

看看这个贴子:

https://e2e.ti.com/support/embedded/tirtos/f/355/t/342555

赞(0)
未经允许不得转载:TI中文支持网 » TMS320DM648-NDK开发传输数据-send函数异常退出问题
分享到: 更多 (0)