工具与软件:
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。
这描述了从回调函数返回一个与上述错误代码不同的错误代码。 请询问应遵循哪一项