工具与软件:
SDK 版本:v1.5.0
ServicePack:servicepack_1.0.1.15-2.15.0.1.bin
我的数据大小为:36KB/s;
一段时间后、在 sl send()函数中阻止。
void SimpleLinkSockEventHandler(SlSockEvent_t *pSock)
回调不会产生事件;或者它在 sl_send()中被阻止,以便 不调用回调。
我想问一下这个问题可能出在哪里以及如何解决。
谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
SDK 版本:v1.5.0
ServicePack:servicepack_1.0.1.15-2.15.0.1.bin
我的数据大小为:36KB/s;
一段时间后、在 sl send()函数中阻止。
void SimpleLinkSockEventHandler(SlSockEvent_t *pSock)
回调不会产生事件;或者它在 sl_send()中被阻止,以便 不调用回调。
我想问一下这个问题可能出在哪里以及如何解决。
谢谢
您好!
否、通过套接字发送的 API 发送套接字后、不执行套接字回调。
套接字 API 可能处于阻塞或非阻塞状态。 发送的套接字超时可以使用 API SL_SOL_SOCKET -> SL_SO_RCVTIMEO 进行设置。 如果您要在非阻塞模式下使用套接字、可以通过 API SL_SOL_SOCKET -> SL_SO_NONBLOCKING 来设置套接字。 更多详细信息、请参阅swru368c。
1月
我找不到 errno 变量、因此我是从以下代码获取 sl_EAGAIN、还是 sl_send 只是返回 sl_EAGAIN
void SimpleLinkSockEventHandler(SlSockEvent_t *pSock)
{
switch(pSock->Event)
{
case SL_SOCKET_TX_FAILED_EVENT:
switch( pSock->socketAsyncEvent.SockTxFailData.status)
{
case SL_ECLOSE:
logError(TAG,"[SOCK ERROR] - close socket (%d) operation "
"failed to transmit all queued packets\n\n",
pSock->socketAsyncEvent.SockTxFailData.sd);
break;
case SL_ENOTCONN:
break;
case SL_EAGAIN:
break;
default:
logError(TAG,"[SOCK ERROR] - TX FAILED:socket %d , reason (%d)\r\n",
pSock->socketAsyncEvent.SockTxFailData.sd,
pSock->socketAsyncEvent.SockTxFailData.status);
break;
}
break;
case SL_SOCKET_ASYNC_EVENT:
break;
default:
logError(TAG,"sock evt.code:%d\r\n",pSock->Event);
break;
}
}/*!
\brief write data to TCP socket
This function is used to transmit a message to another socket.
Returns immediately after sending data to device.
In case of TCP failure an async event SL_SOCKET_TX_FAILED_EVENT is going to
be received.
In case of a RAW socket (transceiver mode), extra 4 bytes should be reserved at the end of the
frame data buffer for WLAN FCS
\param[in] sd socket handle
\param[in] buf Points to a buffer containing
the message to be sent
\param[in] Len message size in bytes. Range: 1-1460 bytes
\param[in] flags Specifies the type of message
transmission. On this version, this parameter is not
supported for TCP.
For transceiver mode, the SL_RAW_RF_TX_PARAMS macro can be used to determine
transmission parameters (channel,rate,tx_power,preamble)
\return Return the number of bytes transmitted,
or -1 if an error occurred
\sa sl_SendTo
\note belongs to \ref send_api
\warning
\par Example:
\code An example of sending data:
SlSockAddrIn_t Addr;
_i16 AddrSize = sizeof(SlSockAddrIn_t);
_i16 SockID;
_i16 Status;
_i8 Buf[SEND_BUF_LEN];
Addr.sin_family = SL_AF_INET;
Addr.sin_port = sl_Htons(5001);
Addr.sin_addr.s_addr = sl_Htonl(SL_IPV4_VAL(10,1,1,200));
SockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0);
Status = sl_Connect(SockID, (SlSockAddr_t *)&Addr, AddrSize);
Status = sl_Send(SockID, Buf, 1460, 0 );
\endcode
*/
#if _SL_INCLUDE_FUNC(sl_Send )
_i16 sl_Send(_i16 sd, const void *buf, _i16 Len, _i16 flags);
#endif
这是 sl_send 的注释、其中指出如果发生异常、-1应该是固定的、而不是 sl_EAGAIN。
这描述了从回调函数返回一个与上述错误代码不同的错误代码。 请询问应遵循哪一项