SimpleLink CC3120/CC3220 Host Driver  Version 2.0.1.22
Simplifies the implementation of Internet connectivity
Socket

Controls standard client/server sockets programming options and capabilities. More...

Functions

_i16 sl_Socket (_i16 Domain, _i16 Type, _i16 Protocol)
 Create an endpoint for communication. More...
 
_i16 sl_Close (_i16 sd)
 Gracefully close socket. More...
 
_i16 sl_Accept (_i16 sd, SlSockAddr_t *addr, SlSocklen_t *addrlen)
 Accept a connection on a socket. More...
 
_i16 sl_Bind (_i16 sd, const SlSockAddr_t *addr, _i16 addrlen)
 Assign a name to a socket. More...
 
_i16 sl_Listen (_i16 sd, _i16 backlog)
 Listen for connections on a socket. More...
 
_i16 sl_Connect (_i16 sd, const SlSockAddr_t *addr, _i16 addrlen)
 Initiate a connection on a socket. More...
 
_i16 sl_Select (_i16 nfds, SlFdSet_t *readsds, SlFdSet_t *writesds, SlFdSet_t *exceptsds, struct SlTimeval_t *timeout)
 Monitor socket activity. More...
 
_i16 sl_SetSockOpt (_i16 sd, _i16 level, _i16 optname, const void *optval, SlSocklen_t optlen)
 Set socket options-. More...
 
_i16 sl_GetSockOpt (_i16 sd, _i16 level, _i16 optname, void *optval, SlSocklen_t *optlen)
 Get socket options. More...
 
_i16 sl_Recv (_i16 sd, void *buf, _i16 len, _i16 flags)
 Read data from TCP socket. More...
 
_i16 sl_RecvFrom (_i16 sd, void *buf, _i16 len, _i16 flags, SlSockAddr_t *from, SlSocklen_t *fromlen)
 Read data from socket. More...
 
_i16 sl_Send (_i16 sd, const void *buf, _i16 len, _i16 flags)
 Write data to TCP socket. More...
 
_i16 sl_SendTo (_i16 sd, const void *buf, _i16 len, _i16 flags, const SlSockAddr_t *to, SlSocklen_t tolen)
 Write data to socket. More...
 
_u32 sl_Htonl (_u32 val)
 Reorder the bytes of a 32-bit unsigned value. More...
 
_u16 sl_Htons (_u16 val)
 Reorder the bytes of a 16-bit unsigned value. More...
 

Typedefs

typedef struct SlInAddr_t SlInAddr_t
 
typedef struct SlIn6Addr_t SlIn6Addr_t
 
typedef _i32 SlTime_t
 
typedef _i32 SlSuseconds_t
 
typedef struct SlTimeval_t SlTimeval_t
 
typedef _u16 SlSocklen_t
 
typedef struct SlSockAddr_t SlSockAddr_t
 
typedef struct SlSockAddrIn6_t SlSockAddrIn6_t
 
typedef struct SlSockAddrIn_t SlSockAddrIn_t
 
typedef struct SlFdSet_t SlFdSet_t
 

Enumerations

enum  SlTxInhibitThreshold_e {
  SL_TX_INHIBIT_THRESHOLD_MIN = 1,
  SL_TX_INHIBIT_THRESHOLD_LOW = 2,
  SL_TX_INHIBIT_THRESHOLD_DEFAULT = 3,
  SL_TX_INHIBIT_THRESHOLD_MED = 4,
  SL_TX_INHIBIT_THRESHOLD_HIGH = 5,
  SL_TX_INHIBIT_THRESHOLD_MAX = 6
}
 
enum  SlSockSecureSocketFilesIndex_e {
  SL_BSD_SECURED_PRIVATE_KEY_IDX = 0,
  SL_BSD_SECURED_CERTIFICATE_IDX,
  SL_BSD_SECURED_CA_IDX,
  SL_BSD_SECURED_DH_IDX
}
 

Detailed Description

Controls standard client/server sockets programming options and capabilities.

Function Documentation

§ sl_Accept()

_i16 sl_Accept ( _i16  sd,
SlSockAddr_t addr,
SlSocklen_t *  addrlen 
)

Accept a connection on a socket.

This function is used with connection-based socket types (SOCK_STREAM).
It extracts the first connection request on the queue of pending connections, creates a new connected socket, and returns a new file descriptor referring to that socket.
The newly created socket is not in the listening state. The original socket sd is unaffected by this call.
The argument sd is a socket that has been created with sl_Socket(), bound to a local address with sl_Bind(), and is listening for connections after a sl_Listen(). The argument addr is a pointer to a sockaddr structure. This structure is filled in with the address of the peer socket, as known to the communications layer. The exact format of the address returned addr is determined by the socket's address family.
The addrlen argument is a value-result argument: it should initially contain the size of the structure pointed to by addr, on return it will contain the actual length (in bytes) of the address returned.

Parameters
[in]sdSocket descriptor (handle)
[out]addrThe argument addr is a pointer to a sockaddr structure. This structure is filled in with the address of the peer socket, as known to the communications layer. The exact format of the address returned addr is determined by the socket's address
sockaddr:
- code for the address format. On this version only AF_INET is supported.
- socket address, the length depends on the code format
[out]addrlenThe addrlen argument is a value-result argument: it should initially contain the size of the structure pointed to by addr
Returns
On success, a socket handle.
On a non-blocking accept a possible negative value is SL_EAGAIN.
On failure, negative error code.
SL_POOL_IS_EMPTY may be return in case there are no resources in the system In this case try again later or increase MAX_CONCURRENT_ACTIONS
See also
sl_Socket sl_Bind sl_Listen
Note
Belongs to server_side
Warning

Definition at line 708 of file sl_socket.c.

709 {
710  _SlSockAcceptMsg_u Msg;
711  _SlReturnVal_t RetVal;
712  SlSocketAddrResponse_u AsyncRsp;
713 
714  _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
715 
716  /* verify that this api is allowed. if not allowed then
717  ignore the API execution and return immediately with an error */
718  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
719 
720  Msg.Cmd.Sd = (_u8)sd;
721 
722  if((addr != NULL) && (addrlen != NULL))
723  {
724  /* If addr is present, addrlen has to be provided */
725  Msg.Cmd.Family = (_u8)((sizeof(SlSockAddrIn_t) == *addrlen) ? SL_AF_INET : SL_AF_INET6);
726  }
727  else
728  {
729  /* In any other case, addrlen is ignored */
730  Msg.Cmd.Family = (_u8)0;
731  }
732 
733  ObjIdx = _SlDrvProtectAsyncRespSetting((_u8*)&AsyncRsp, ACCEPT_ID, (_u8)sd & SL_BSD_SOCKET_ID_MASK);
734 
735  if (MAX_CONCURRENT_ACTIONS == ObjIdx)
736  {
737  return SL_POOL_IS_EMPTY;
738  }
739 
740  /* send the command */
741  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlAcceptCmdCtrl, &Msg, NULL));
742  VERIFY_PROTOCOL(Msg.Rsp.Sd == (_u8)sd);
743 
744  RetVal = Msg.Rsp.StatusOrLen;
745 
746  if(SL_OS_RET_CODE_OK == RetVal)
747  {
748 #ifndef SL_TINY
749  /* in case socket is non-blocking one, the async event should be received immediately */
750  if( g_pCB->SocketNonBlocking & (1<<(sd & SL_BSD_SOCKET_ID_MASK) ))
751  {
752  SL_DRV_SYNC_OBJ_WAIT_TIMEOUT(&g_pCB->ObjPool[ObjIdx].SyncObj,
753  SL_DRIVER_TIMEOUT_SHORT,
754  SL_OPCODE_SOCKET_ACCEPTASYNCRESPONSE
755  );
756  }
757  else
758 #endif
759  {
760  /* wait for async and get Data Read parameters */
761  SL_DRV_SYNC_OBJ_WAIT_FOREVER(&g_pCB->ObjPool[ObjIdx].SyncObj);
762  }
763 
764  VERIFY_PROTOCOL(AsyncRsp.IpV4.Sd == (_u8)sd);
765 
766  RetVal = AsyncRsp.IpV4.StatusOrLen;
767 #if 0 /* Kept for backup */
768  _SlSocketParseAddress(&AsyncRsp, addr, addrlen);
769 #else
770  if((addr != NULL) && (addrlen != NULL))
771  {
772  addr->sa_family = AsyncRsp.IpV4.Family;
773 
774  if(SL_AF_INET == addr->sa_family)
775  {
776  if( *addrlen == (SlSocklen_t)sizeof( SlSockAddrIn_t ) )
777  {
778  ((SlSockAddrIn_t *)addr)->sin_port = AsyncRsp.IpV4.Port;
779  ((SlSockAddrIn_t *)addr)->sin_addr.s_addr = AsyncRsp.IpV4.Address;
780  }
781  else
782  {
783  *addrlen = 0;
784  }
785  }
786 #ifdef SL_SUPPORT_IPV6
787  else if(SL_AF_INET6 == addr->sa_family)
788  {
789  if( *addrlen == sizeof( SlSockAddrIn6_t ) )
790  {
791  ((SlSockAddrIn6_t *)addr)->sin6_port = AsyncRsp.IpV6.Port ;
792  sl_Memcpy(((SlSockAddrIn6_t *)addr)->sin6_addr._S6_un._S6_u32, AsyncRsp.IpV6.Address, 16);
793  }
794  else
795  {
796  *addrlen = 0;
797  }
798  }
799 #endif
800  }
801 #endif
802  }
803 
804  _SlDrvReleasePoolObj(ObjIdx);
805  return (_i16)RetVal;
806 }

§ sl_Bind()

_i16 sl_Bind ( _i16  sd,
const SlSockAddr_t addr,
_i16  addrlen 
)

Assign a name to a socket.

This function gives the socket the local address addr. addr is addrlen bytes long. Traditionally, this is called When a socket is created with socket, it exists in a name space (address family) but has no name assigned. It is necessary to assign a local address before a SOCK_STREAM socket may receive connections.

Parameters
[in]sdSocket descriptor (handle)
[in]addrSpecifies the destination addrs
sockaddr:
- code for the address format. On this version only SL_AF_INET is supported.
- socket address, the length depends on the code format
[in]addrlenContains the size of the structure pointed to by addr
Returns
Zero on success, or negative error code on failure
See also
sl_Socket sl_Accept sl_Listen
Note
belongs to basic_api
Warning

Definition at line 247 of file sl_socket.c.

248 {
249  _SlSockBindMsg_u Msg;
250  _SlCmdCtrl_t CmdCtrl = {0, 0, (_SlArgSize_t)sizeof(SlSocketResponse_t)};
251 
252  /* verify that this api is allowed. if not allowed then
253  ignore the API execution and return immediately with an error */
254  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
255 
256  switch(addr->sa_family)
257  {
258  case SL_AF_INET :
259  CmdCtrl.Opcode = SL_OPCODE_SOCKET_BIND;
260  CmdCtrl.TxDescLen = (_SlArgSize_t)sizeof(SlSocketAddrIPv4Command_t);
261  break;
262 #ifndef SL_TINY
263 #ifdef SL_SUPPORT_IPV6
264  case SL_AF_INET6:
265  CmdCtrl.Opcode = SL_OPCODE_SOCKET_BIND_V6;
266  CmdCtrl.TxDescLen = (_SlArgSize_t)sizeof(SlSocketAddrIPv6Command_t);
267  break;
268 #endif
269 #endif
270 
271  case SL_AF_RF :
272  default:
273  return SL_RET_CODE_INVALID_INPUT;
274  }
275 
276  Msg.Cmd.IpV4.LenOrPadding = 0;
277  Msg.Cmd.IpV4.Sd = (_u8)sd;
278 
279  _SlSocketBuildAddress(addr, &Msg.Cmd);
280  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&CmdCtrl, &Msg, NULL));
281 
282  return Msg.Rsp.StatusOrLen;
283 }

§ sl_Close()

_i16 sl_Close ( _i16  sd)

Gracefully close socket.

This function causes the system to release resources allocated to a socket.
In case of TCP, the connection is terminated.

Parameters
[in]sdSocket handle (received in sl_Socket)
Returns
Zero on success, or negative error code on failure
See also
sl_Socket
Note
belongs to ext_api
Warning

Definition at line 187 of file sl_socket.c.

188 {
189  _SlSockCloseMsg_u Msg;
190  _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
191  SlSocketResponse_t AsyncRsp;
192  _SlReturnVal_t RetVal;
193  _u8 bSocketInAction = FALSE;
194 
195  /* verify that this api is allowed. if not allowed then
196  ignore the API execution and return immediately with an error */
197  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
198 
199  Msg.Cmd.Sd = (_u8)sd;
200  _SlDrvMemZero(&AsyncRsp, sizeof(SlSocketResponse_t));
201 
202  /* check if the socket has already action in progress */
203  bSocketInAction = !!(g_pCB->ActiveActionsBitmap & (1<<sd));
204 
205  if (bSocketInAction == FALSE)
206  {
207  ObjIdx = _SlDrvProtectAsyncRespSetting((_u8*)&AsyncRsp, CLOSE_ID, (_u8)(sd & SL_BSD_SOCKET_ID_MASK));
208 
209  if (MAX_CONCURRENT_ACTIONS == ObjIdx)
210  {
211  return SL_POOL_IS_EMPTY;
212  }
213  }
214 
215  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlSockCloseCmdCtrl, &Msg, NULL));
216 
217  RetVal = Msg.Rsp.StatusOrLen;
218 
219  if (bSocketInAction == FALSE)
220  {
221  if( SL_RET_CODE_OK == RetVal)
222  {
223  SL_DRV_SYNC_OBJ_WAIT_TIMEOUT(&g_pCB->ObjPool[ObjIdx].SyncObj,
224  SL_DRIVER_TIMEOUT_LONG,
225  SL_OPCODE_SOCKET_SOCKETCLOSEASYNCEVENT
226  );
227  RetVal = AsyncRsp.StatusOrLen;
228  }
229 
230  _SlDrvReleasePoolObj(ObjIdx);
231  }
232 
233  return RetVal;
234 }

§ sl_Connect()

_i16 sl_Connect ( _i16  sd,
const SlSockAddr_t addr,
_i16  addrlen 
)

Initiate a connection on a socket.

Function connects the socket referred to by the socket descriptor sd, to the address specified by addr. The addrlen argument specifies the size of addr. The format of the address in addr is determined by the address space of the socket. If it is of type SOCK_DGRAM, this call specifies the peer with which the socket is to be associated; this address is that to which datagrams are to be sent, and the only address from which datagrams are to be received. If the socket is of type SOCK_STREAM, this call attempts to make a connection to another socket. The other socket is specified by address, which is an address in the communications space of the socket.

Parameters
[in]sdSocket descriptor (handle)
[in]addrSpecifies the destination addr
sockaddr:
- code for the address format. On this version only AF_INET is supported.
- socket address, the length depends on the code format
[in]addrlenContains the size of the structure pointed to by addr
Returns
On success, a socket handle.
On a non-blocking connect a possible negative value is SL_EALREADY. On failure, negative value.
SL_POOL_IS_EMPTY may be return in case there are no resources in the system In this case try again later or increase MAX_CONCURRENT_ACTIONS
See also
sl_Socket
Note
belongs to client_side
Warning

Definition at line 464 of file sl_socket.c.

465 {
466  _SlSockConnectMsg_u Msg;
467  _SlReturnVal_t RetVal;
468  _SlCmdCtrl_t CmdCtrl = {0, (_SlArgSize_t)0, (_SlArgSize_t)sizeof(SlSocketResponse_t)};
469  SlSocketResponse_t AsyncRsp;
470  _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
471 
472  /* verify that this api is allowed. if not allowed then
473  ignore the API execution and return immediately with an error */
474  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
475  _SlDrvMemZero(&AsyncRsp, sizeof(SlSocketResponse_t));
476 
477  switch(addr->sa_family)
478  {
479  case SL_AF_INET :
480  CmdCtrl.Opcode = SL_OPCODE_SOCKET_CONNECT;
481  CmdCtrl.TxDescLen = (_SlArgSize_t)sizeof(SlSocketAddrIPv4Command_t);
482  /* Do nothing - cmd already initialized to this type */
483  break;
484 #ifdef SL_SUPPORT_IPV6
485  case SL_AF_INET6:
486  CmdCtrl.Opcode = SL_OPCODE_SOCKET_CONNECT_V6;
487  CmdCtrl.TxDescLen = (_SlArgSize_t)sizeof(SlSocketAddrIPv6Command_t);
488  break;
489 #endif
490  case SL_AF_RF:
491  default:
492  return SL_RET_CODE_INVALID_INPUT;
493  }
494 
495  Msg.Cmd.IpV4.LenOrPadding = 0;
496  Msg.Cmd.IpV4.Sd = (_u8)sd;
497 
498  _SlSocketBuildAddress(addr, &Msg.Cmd);
499 
500  ObjIdx = _SlDrvProtectAsyncRespSetting((_u8*)&AsyncRsp, CONNECT_ID, (_u8)(sd & SL_BSD_SOCKET_ID_MASK));
501 
502  if (MAX_CONCURRENT_ACTIONS == ObjIdx)
503  {
504  return SL_POOL_IS_EMPTY;
505  }
506 
507  /* send the command */
508  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&CmdCtrl, &Msg, NULL));
509  VERIFY_PROTOCOL(Msg.Rsp.Sd == (_u8)sd);
510 
511  RetVal = Msg.Rsp.StatusOrLen;
512 
513  if(SL_RET_CODE_OK == RetVal)
514  {
515 #ifndef SL_TINY
516  /*In case socket is non-blocking one, the async event should be received immediately */
517  if( g_pCB->SocketNonBlocking & (1<<(sd & SL_BSD_SOCKET_ID_MASK) ))
518  {
519  SL_DRV_SYNC_OBJ_WAIT_TIMEOUT(&g_pCB->ObjPool[ObjIdx].SyncObj,
520  SL_DRIVER_TIMEOUT_SHORT,
521  SL_OPCODE_SOCKET_CONNECTASYNCRESPONSE
522  );
523  }
524  else
525 #endif
526  {
527 
528  /* wait for async and get Data Read parameters */
529  SL_DRV_SYNC_OBJ_WAIT_FOREVER(&g_pCB->ObjPool[ObjIdx].SyncObj);
530  }
531 
532  VERIFY_PROTOCOL(AsyncRsp.Sd == (_u8)sd);
533  RetVal = AsyncRsp.StatusOrLen;
534  }
535 
536  _SlDrvReleasePoolObj(ObjIdx);
537  return RetVal;
538 }

§ sl_GetSockOpt()

_i16 sl_GetSockOpt ( _i16  sd,
_i16  level,
_i16  optname,
void *  optval,
SlSocklen_t *  optlen 
)

Get socket options.

This function manipulate the options associated with a socket. Options may exist at multiple protocol levels; they are always present at the uppermost socket level.
When manipulating socket options the level at which the option resides and the name of the option must be specified. To manipulate options at the socket level, level is specified as SOL_SOCKET. To manipulate options at any other level the protocol number of the appropriate proto- col controlling the option is supplied. For example, to indicate that an option is to be interpreted by the TCP protocol, level should be set to the protocol number of TCP;
The parameters optval and optlen are used to access optval - ues for setsockopt(). For getsockopt() they identify a buffer in which the value for the requested option(s) are to be returned. For getsockopt(), optlen is a value-result parameter, initially containing the size of the buffer pointed to by option_value, and modified on return to indicate the actual size of the value returned. If no option value is to be supplied or returned, option_value may be NULL.

Parameters
[in]sdSocket handle
[in]levelDefines the protocol level for this option
[in]optnamedefines the option name to interrogate
[out]optvalSpecifies a value for the option
[out]optlenSpecifies the length of the option value
Returns
Zero on success, or negative error code on failure
See also
sl_SetSockOpt
Note
See sl_SetSockOpt Belongs to ext_api
Warning

Definition at line 986 of file sl_socket.c.

987 {
988  _SlGetSockOptMsg_u Msg;
989  _SlCmdExt_t CmdExt;
990 
991  /* verify that this api is allowed. if not allowed then
992  ignore the API execution and return immediately with an error */
993  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
994  if (*optlen == 0)
995  {
996  return SL_EZEROLEN;
997  }
998 
999  _SlDrvResetCmdExt(&CmdExt);
1000  CmdExt.RxPayloadLen = (_i16)(*optlen);
1001  CmdExt.pRxPayload = optval;
1002 
1003  Msg.Cmd.Sd = (_u8)sd;
1004  Msg.Cmd.Level = (_u8)level;
1005  Msg.Cmd.OptionLen = (_u8)(*optlen);
1006  Msg.Cmd.OptionName = (_u8)optname;
1007 
1008  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlGetSockOptCmdCtrl, &Msg, &CmdExt));
1009 
1010  if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen)
1011  {
1012  *optlen = Msg.Rsp.OptionLen;
1013  return SL_ESMALLBUF;
1014  }
1015  else
1016  {
1017  *optlen = (_u8)CmdExt.ActualRxPayloadLen;
1018  }
1019  return (_i16)Msg.Rsp.Status;
1020 }

§ sl_Htonl()

_u32 sl_Htonl ( _u32  val)

Reorder the bytes of a 32-bit unsigned value.

This function is used to Reorder the bytes of a 32-bit unsigned value from processor order to network order.

Parameters
[in]valVariable to reorder
Returns
Return the reorder variable,
See also
sl_SendTo sl_Bind sl_Connect sl_RecvFrom sl_Accept
Note
Belongs to send_api
Warning

Definition at line 813 of file sl_socket.c.

814 {
815  _u32 i = 1;
816  _i8 *p = (_i8 *)&i;
817  if (p[0] == 1) /* little endian */
818  {
819  p[0] = ((_i8* )&val)[3];
820  p[1] = ((_i8* )&val)[2];
821  p[2] = ((_i8* )&val)[1];
822  p[3] = ((_i8* )&val)[0];
823  return i;
824  }
825  else /* big endian */
826  {
827  return val;
828  }
829 }

§ sl_Htons()

_u16 sl_Htons ( _u16  val)

Reorder the bytes of a 16-bit unsigned value.

This function is used to Reorder the bytes of a 16-bit unsigned value from processor order to network order.

Parameters
[in]valVariable to reorder
Returns
Return the reorder variable,
See also
sl_SendTo sl_Bind sl_Connect sl_RecvFrom sl_Accept
Note
Belongs to send_api
Warning

Definition at line 834 of file sl_socket.c.

835 {
836  _i16 i = 1;
837  _i8 *p = (_i8 *)&i;
838  if (p[0] == 1) /* little endian */
839  {
840  p[0] = ((_i8* )&val)[1];
841  p[1] = ((_i8* )&val)[0];
842  return (_u16)i;
843  }
844  else /* big endian */
845  {
846  return val;
847  }
848 }

§ sl_Listen()

_i16 sl_Listen ( _i16  sd,
_i16  backlog 
)

Listen for connections on a socket.

The willingness to accept incoming connections and a queue limit for incoming connections are specified with listen(), and then the connections are accepted with accept. The listen() call applies only to sockets of type SOCK_STREAM The backlog parameter defines the maximum length the queue of pending connections may grow to.

Parameters
[in]sdSocket descriptor (handle)
[in]backlogSpecifies the listen queue depth.
Returns
Zero on success, or negative error code on failure
See also
sl_Socket sl_Accept sl_Bind
Note
Belongs to server_side
Warning

Definition at line 672 of file sl_socket.c.

673 {
674  _SlListenMsg_u Msg;
675 
676  /* verify that this api is allowed. if not allowed then
677  ignore the API execution and return immediately with an error */
678  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
679 
680  Msg.Cmd.Sd = (_u8)sd;
681  Msg.Cmd.Backlog = (_u8)backlog;
682 
683  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlListenCmdCtrl, &Msg, NULL));
684  return (_i16)Msg.Rsp.status;
685 }

§ sl_Recv()

_i16 sl_Recv ( _i16  sd,
void *  buf,
_i16  len,
_i16  flags 
)

Read data from TCP socket.

Function receives a message from a connection-mode socket

Parameters
[in]sdSocket handle
[out]bufPoints to the buffer where the message should be stored.
[in]lenSpecifies the length in bytes of the buffer pointed to by the buffer argument. Range: 1-16000 bytes
[in]flagsSpecifies the type of message reception. On this version, this parameter is not supported.
Returns
Return the number of bytes received, or a negative value if an error occurred.
Using a non-blocking recv a possible negative value is SL_EAGAIN.
SL_POOL_IS_EMPTY may be return in case there are no resources in the system In this case try again later or increase MAX_CONCURRENT_ACTIONS
See also
sl_RecvFrom
Note
Belongs to recv_api
Warning
Examples

Definition at line 892 of file sl_socket.c.

893 {
894  _SlRecvMsg_u Msg;
895  _SlCmdExt_t CmdExt;
896  _SlReturnVal_t status;
897 
898  /* verify that this api is allowed. if not allowed then
899  ignore the API execution and return immediately with an error */
900  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
901 
902  _SlDrvResetCmdExt(&CmdExt);
903  CmdExt.RxPayloadLen = Len;
904  CmdExt.pRxPayload = (_u8 *)pBuf;
905 
906  Msg.Cmd.Sd = (_u8)sd;
907  Msg.Cmd.StatusOrLen = (_u16)Len;
908 
909  /* no size truncation in recv path */
910  CmdExt.RxPayloadLen = (_i16)Msg.Cmd.StatusOrLen;
911 
912  Msg.Cmd.FamilyAndFlags = (_u8)(flags & 0x0F);
913 
914  status = _SlDrvDataReadOp((_SlSd_t)sd, (_SlCmdCtrl_t *)&_SlRecvCmdCtrl, &Msg, &CmdExt);
915  if( status != SL_OS_RET_CODE_OK )
916  {
917  return status;
918  }
919 
920  /* if the Device side sends less than expected it is not the Driver's role */
921  /* the returned value could be smaller than the requested size */
922  return (_i16)Msg.Rsp.StatusOrLen;
923 }

§ sl_RecvFrom()

_i16 sl_RecvFrom ( _i16  sd,
void *  buf,
_i16  len,
_i16  flags,
SlSockAddr_t from,
SlSocklen_t *  fromlen 
)

Read data from socket.

Function receives a message from a connection-mode or connectionless-mode socket

Parameters
[in]sdSocket handle
[out]bufPoints to the buffer where the message should be stored.
[in]lenSpecifies the length in bytes of the buffer pointed to by the buffer argument. Range: 1-16000 bytes
[in]flagsSpecifies the type of message reception. On this version, this parameter is not supported.
[in]fromPointer to an address structure indicating the source address.
sockaddr:
- code for the address format. On this version only AF_INET is supported.
- socket address, the length depends on the code format
[in]fromlenSource address structure size. This parameter MUST be set to the size of the structure pointed to by addr.
Returns
Return the number of bytes received, or a negative value if an error occurred.
Using a non-blocking recv a possible negative value is SL_EAGAIN. SL_RET_CODE_INVALID_INPUT (-2) will be returned if fromlen has incorrect length.
SL_POOL_IS_EMPTY may be return in case there are no resources in the system In this case try again later or increase MAX_CONCURRENT_ACTIONS
See also
sl_Recv
Note
Belongs to recv_api
Warning
Example

Definition at line 375 of file sl_socket.c.

376 {
377  _SlRecvfromMsg_u Msg;
378  _SlCmdExt_t CmdExt;
379  _i16 RetVal;
380 
381  /* verify that this api is allowed. if not allowed then
382  ignore the API execution and return immediately with an error */
383  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
384 
385  /* RAW transceiver use only sl_Recv */
386  if ((sd & SL_SOCKET_PAYLOAD_TYPE_MASK) == SL_SOCKET_PAYLOAD_TYPE_RAW_TRANCEIVER)
387  {
388  return SL_ERROR_BSD_SOC_ERROR;
389  }
390 
391  _SlDrvResetCmdExt(&CmdExt);
392  CmdExt.RxPayloadLen = Len;
393  CmdExt.pRxPayload = (_u8 *)buf;
394 
395  Msg.Cmd.Sd = (_u8)sd;
396  Msg.Cmd.StatusOrLen = (_u16)Len;
397 
398  /* no size truncation in recv path */
399  CmdExt.RxPayloadLen = (_i16)Msg.Cmd.StatusOrLen;
400 
401  Msg.Cmd.FamilyAndFlags = (_u8)(flags & 0x0F);
402 
403  if(sizeof(SlSockAddrIn_t) == *fromlen)
404  {
405  Msg.Cmd.FamilyAndFlags |= (SL_AF_INET << 4);
406  }
407  else if (sizeof(SlSockAddrIn6_t) == *fromlen)
408  {
409  Msg.Cmd.FamilyAndFlags |= (SL_AF_INET6 << 4);
410  }
411  else
412  {
413  return SL_RET_CODE_INVALID_INPUT;
414  }
415 
416  RetVal = _SlDrvDataReadOp((_SlSd_t)sd, (_SlCmdCtrl_t *)&_SlRecvfomCmdCtrl, &Msg, &CmdExt);
417  if( RetVal != SL_OS_RET_CODE_OK )
418  {
419  return RetVal;
420  }
421 
422  RetVal = Msg.Rsp.IpV4.StatusOrLen;
423 
424  if(RetVal >= 0)
425  {
426  VERIFY_PROTOCOL(sd == (_i16)Msg.Rsp.IpV4.Sd);
427 #if 0
428  _SlSocketParseAddress(&Msg.Rsp, from, fromlen);
429 #else
430  from->sa_family = Msg.Rsp.IpV4.Family;
431  if(SL_AF_INET == from->sa_family)
432  {
433  ((SlSockAddrIn_t *)from)->sin_port = Msg.Rsp.IpV4.Port;
434  ((SlSockAddrIn_t *)from)->sin_addr.s_addr = Msg.Rsp.IpV4.Address;
435  *fromlen = (SlSocklen_t)sizeof(SlSockAddrIn_t);
436  }
437 #ifdef SL_SUPPORT_IPV6
438  else if(SL_AF_INET6 == from->sa_family)
439  {
440  VERIFY_PROTOCOL(*fromlen >= sizeof(SlSockAddrIn6_t));
441 
442  ((SlSockAddrIn6_t *)from)->sin6_port = Msg.Rsp.IpV6.Port;
443  sl_Memcpy(((SlSockAddrIn6_t *)from)->sin6_addr._S6_un._S6_u32, Msg.Rsp.IpV6.Address, 16);
444  *fromlen = sizeof(SlSockAddrIn6_t);
445  }
446 #endif
447 #endif
448  }
449 
450  return (_i16)RetVal;
451 }

§ sl_Select()

_i16 sl_Select ( _i16  nfds,
SlFdSet_t readsds,
SlFdSet_t writesds,
SlFdSet_t exceptsds,
struct SlTimeval_t timeout 
)

Monitor socket activity.

Select allow a program to monitor multiple file descriptors, waiting until one or more of the file descriptors become "ready" for some class of I/O operation. If trigger mode is enabled the active fdset is the one that was retrieved in the first triggered call. To enable the trigger mode, an handler must be statically registered as slcb_SocketTriggerEventHandler in user.h

Parameters
[in]nfdsThe highest-numbered file descriptor in any of the three sets, plus 1.
[out]readsdsSocket descriptors list for read monitoring and accept monitoring
[out]writesdsSocket descriptors list for connect monitoring only, write monitoring is not supported
[out]exceptsdsSocket descriptors list for exception monitoring, not supported.
[in]timeoutIs an upper bound on the amount of time elapsed before select() returns. Null or above 0xffff seconds means infinity timeout. The minimum timeout is 10 milliseconds, less than 10 milliseconds will be set automatically to 10 milliseconds. Max microseconds supported is 0xfffc00. In trigger mode the timout fields must be set to zero.
Returns
On success, select() returns the number of file descriptors contained in the three returned descriptor sets (that is, the total number of bits that are set in readfds, writefds, exceptfds) which may be zero if the timeout expires before anything interesting happens.
On error, a negative value is returned. readsds - return the sockets on which read request will return without delay with valid data.
writesds - return the sockets on which write request will return without delay.
exceptsds - return the sockets closed recently.
SL_POOL_IS_EMPTY may be return in case there are no resources in the system In this case try again later or increase MAX_CONCURRENT_ACTIONS
See also
sl_Socket
Note
If the timeout value set to less than 10ms it will automatically set to 10ms to prevent overload of the system
Belongs to basic_api

Several threads can call sl_Select at the same time.Calling this API while the same command is called from another thread, may result in one of the following scenarios:

  1. The command will be executed alongside other select callers (success).
  2. The command will wait (internal) until the previous sl_select finish, and then be executed.
  3. There are not enough resources and SL_POOL_IS_EMPTY error will return. In this case, MAX_CONCURRENT_ACTIONS can be increased (result in memory increase) or try again later to issue the command.

In case all the user sockets are open, sl_Select will exhibit the behaviour mentioned in (2) This is due to the fact sl_select supports multiple callers by utilizing one user socket internally. User who wish to ensure multiple select calls at any given time, must reserve one socket out of the 16 given.

Warning
multiple select calls aren't supported when trigger mode is active. The two are mutually exclusive.

Definition at line 1728 of file sl_socket.c.

1729 {
1730  _SlSelectMsg_u Msg;
1731  SlSelectAsyncResponse_t AsyncRsp;
1732  _u8 ObjIdx = MAX_CONCURRENT_ACTIONS;
1733 #if ((defined(SL_RUNTIME_EVENT_REGISTERATION) || defined(slcb_SocketTriggerEventHandler)))
1734  _u8 IsNonBlocking = FALSE;
1735 #endif
1736 
1737  /* verify that this API is allowed. if not allowed then
1738  ignore the API execution and return immediately with an error */
1739  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
1740 
1741 #if ((defined(SL_RUNTIME_EVENT_REGISTERATION) || defined(slcb_SocketTriggerEventHandler)))
1742  if(1 == _SlIsEventRegistered(SL_EVENT_HDL_SOCKET_TRIGGER))
1743  {
1744  if( NULL != timeout )
1745  {
1746  /* Set that we are in Non-Blocking mode */
1747  if ( (0 == timeout->tv_sec) && (0 == timeout->tv_usec) )
1748  {
1749  IsNonBlocking = TRUE;
1750  }
1751  else
1752  {
1753  SL_DRV_PROTECTION_OBJ_LOCK_FOREVER();
1754 
1755  /* If there is a trigger select running in the progress abort the new blocking request */
1756  if (g_pCB->SocketTriggerSelect.Info.State > SOCK_TRIGGER_READY)
1757  {
1758  SL_DRV_PROTECTION_OBJ_UNLOCK();
1759  return SL_RET_CODE_SOCKET_SELECT_IN_PROGRESS_ERROR;
1760  }
1761 
1762  SL_DRV_PROTECTION_OBJ_UNLOCK();
1763  }
1764 
1765  if (IsNonBlocking == TRUE)
1766  {
1767  /* return EAGAIN if we alreay have select trigger in progress */
1768  if (g_pCB->SocketTriggerSelect.Info.State == SOCK_TRIGGER_WAITING_FOR_RESP)
1769  {
1770  return SL_ERROR_BSD_EAGAIN;
1771  }
1772  /* return the stored response if already received */
1773  else if (g_pCB->SocketTriggerSelect.Info.State == SOCK_TRIGGER_RESP_RECEIVED)
1774  {
1775 
1776  if( ((_i16)g_pCB->SocketTriggerSelect.Resp.Status) >= 0 )
1777  {
1778  if( readsds )
1779  {
1780  readsds->fd_array[0] = g_pCB->SocketTriggerSelect.Resp.ReadFds;
1781  }
1782  if( writesds )
1783  {
1784  writesds->fd_array[0] = g_pCB->SocketTriggerSelect.Resp.WriteFds;
1785  }
1786  }
1787 
1788  /* Now relaese the pool object */
1789  _SlDrvReleasePoolObj(g_pCB->SocketTriggerSelect.Info.ObjPoolIdx);
1790 
1791  g_pCB->SocketTriggerSelect.Info.ObjPoolIdx = MAX_CONCURRENT_ACTIONS;
1792 
1793  /* Reset the socket select trigger object */
1794  g_pCB->SocketTriggerSelect.Info.State = SOCK_TRIGGER_READY;
1795 
1796  return (_i16)g_pCB->SocketTriggerSelect.Resp.Status;
1797  }
1798  }
1799  }
1800  }
1801 #endif
1802 
1803  Msg.Cmd.Nfds = (_u8)nfds;
1804  Msg.Cmd.ReadFdsCount = 0;
1805  Msg.Cmd.WriteFdsCount = 0;
1806 
1807  Msg.Cmd.ReadFds = 0;
1808  Msg.Cmd.WriteFds = 0;
1809 
1810 
1811  if( readsds )
1812  {
1813  Msg.Cmd.ReadFds = (_u16)readsds->fd_array[0];
1814  }
1815  if( writesds )
1816  {
1817  Msg.Cmd.WriteFds = (_u16)writesds->fd_array[0];
1818  }
1819  if( NULL == timeout )
1820  {
1821  Msg.Cmd.tv_sec = 0xffff;
1822  Msg.Cmd.tv_usec = 0xffff;
1823  }
1824  else
1825  {
1826  if( 0xffff <= timeout->tv_sec )
1827  {
1828  Msg.Cmd.tv_sec = 0xffff;
1829  }
1830  else
1831  {
1832  Msg.Cmd.tv_sec = (_u16)timeout->tv_sec;
1833  }
1834 
1835  /* convert to milliseconds */
1836  timeout->tv_usec = timeout->tv_usec >> 10;
1837 
1838  if( 0xffff <= timeout->tv_usec )
1839  {
1840  Msg.Cmd.tv_usec = 0xffff;
1841  }
1842  else
1843  {
1844  Msg.Cmd.tv_usec = (_u16)timeout->tv_usec;
1845  }
1846 
1847  }
1848 
1849  /* Use Obj to issue the command, if not available try later */
1850  ObjIdx = _SlDrvProtectAsyncRespSetting((_u8*)&AsyncRsp, SELECT_ID, SL_MAX_SOCKETS);
1851 
1852  if (MAX_CONCURRENT_ACTIONS == ObjIdx)
1853  {
1854  return SL_POOL_IS_EMPTY;
1855  }
1856 
1857  /* send the command */
1858  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlSelectCmdCtrl, &Msg, NULL));
1859 
1860  if(SL_OS_RET_CODE_OK == (_i16)Msg.Rsp.status)
1861  {
1862  SL_DRV_SYNC_OBJ_WAIT_FOREVER(&g_pCB->ObjPool[ObjIdx].SyncObj);
1863 
1864  Msg.Rsp.status = (_i16)AsyncRsp.Status;
1865 
1866  /* this code handles the socket trigger mode case */
1867 #if((defined(SL_RUNTIME_EVENT_REGISTERATION) || defined(slcb_SocketTriggerEventHandler)))
1868  if(1 == _SlIsEventRegistered(SL_EVENT_HDL_SOCKET_TRIGGER))
1869  {
1870  /* if no data returned and we are in trigger mode,
1871  send another select cmd but now with timeout infinite,
1872  and return immediately with EAGAIN to the user */
1873  if ((IsNonBlocking == TRUE) && (AsyncRsp.Status == 0))
1874  {
1875  /* set the select trigger-in-progress bit */
1876  g_pCB->SocketTriggerSelect.Info.State = SOCK_TRIGGER_WAITING_FOR_RESP;
1877 
1878  Msg.Cmd.tv_sec = 0xffff;
1879  Msg.Cmd.tv_usec = 0xffff;
1880 
1881  /* Release pool object and try to take another call */
1882  _SlDrvReleasePoolObj(ObjIdx);
1883 
1884  /* Use Obj to issue the command, if not available try later */
1885  ObjIdx = _SlDrvProtectAsyncRespSetting((_u8*)&g_pCB->SocketTriggerSelect.Resp, SELECT_ID, SL_MAX_SOCKETS);
1886 
1887  if (MAX_CONCURRENT_ACTIONS == ObjIdx)
1888  {
1889  return SL_POOL_IS_EMPTY;
1890  }
1891 
1892  /* Save the pool index to be released only after the user read the response */
1893  g_pCB->SocketTriggerSelect.Info.ObjPoolIdx = ObjIdx;
1894 
1895  /* send the command */
1896  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlSelectCmdCtrl, &Msg, NULL));
1897  return SL_ERROR_BSD_EAGAIN;
1898 
1899  }
1900  }
1901 #endif
1902 
1903  if( ((_i16)Msg.Rsp.status) >= 0 )
1904  {
1905  if( readsds )
1906  {
1907  readsds->fd_array[0] = AsyncRsp.ReadFds;
1908  }
1909  if( writesds )
1910  {
1911  writesds->fd_array[0] = AsyncRsp.WriteFds;
1912  }
1913  }
1914  }
1915 
1916  _SlDrvReleasePoolObj(ObjIdx);
1917  return (_i16)Msg.Rsp.status;
1918 }
void slcb_SocketTriggerEventHandler(SlSockTriggerEvent_t *pSlSockTriggerEvent)
Socket trigger routine. This routine will notify the application that a netwrok activity has been com...

§ sl_Send()

_i16 sl_Send ( _i16  sd,
const void *  buf,
_i16  len,
_i16  flags 
)

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

Parameters
[in]sdSocket handle
[in]bufPoints to a buffer containing the message to be sent
[in]lenMessage size in bytes. Range: 1-1460 bytes
[in]flagsSpecifies the type of message transmission. On this version, this parameter is not supported for TCP. For transceiver mode, the SL_WLAN_RAW_RF_TX_PARAMS macro can be used to determine transmission parameters (channel,rate,tx_power,preamble)
Returns
Zero on success, or negative error code on failure
See also
sl_SendTo
Note
Belongs to send_api
Warning
Example

Definition at line 606 of file sl_socket.c.

607 {
608  _SlSendMsg_u Msg;
609  _SlCmdExt_t CmdExt;
610  _i16 RetVal;
611  _u32 tempVal;
612 
613  /* verify that this api is allowed. if not allowed then
614  ignore the API execution and return immediately with an error */
615  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
616 
617  _SlDrvResetCmdExt(&CmdExt);
618  CmdExt.TxPayload1Len = (_u16)Len;
619  CmdExt.pTxPayload1 = (_u8 *)pBuf;
620 
621  /* Only for RAW transceiver type socket, relay the flags parameter in the 2 bytes (4 byte aligned) before the actual payload */
622  if ((sd & SL_SOCKET_PAYLOAD_TYPE_MASK) == SL_SOCKET_PAYLOAD_TYPE_RAW_TRANCEIVER)
623  {
624  tempVal = (_u32)flags;
625  CmdExt.pRxPayload = (_u8 *)&tempVal;
626  CmdExt.RxPayloadLen = -4; /* the (-) sign is used to mark the rx buff as output buff as well*/
627  }
628  else
629  {
630  CmdExt.pRxPayload = NULL;
631  if (Len < 1)
632  {
633  /* ignore */
634  return 0;
635  }
636  }
637 
638  Msg.Cmd.StatusOrLen = Len;
639  Msg.Cmd.Sd = (_u8)sd;
640  Msg.Cmd.FamilyAndFlags |= flags & 0x0F;
641 
642  RetVal = _SlDrvDataWriteOp((_u8)sd, (_SlCmdCtrl_t *)&_SlSendCmdCtrl, &Msg, &CmdExt);
643  if(SL_OS_RET_CODE_OK != RetVal)
644  {
645  return RetVal;
646  }
647 
648  return (_i16)Len;
649 }

§ sl_SendTo()

_i16 sl_SendTo ( _i16  sd,
const void *  buf,
_i16  len,
_i16  flags,
const SlSockAddr_t to,
SlSocklen_t  tolen 
)

Write data to socket.

This function is used to transmit a message to another socket (connection less socket SOCK_DGRAM, SOCK_RAW).
Returns immediately after sending data to device.
In case of transmission failure an async event SL_SOCKET_TX_FAILED_EVENT is going to be received.

Parameters
[in]sdSocket handle
[in]bufPoints to a buffer containing the message to be sent
[in]lenmessage size in bytes. Range: 1-1460 bytes
[in]flagsSpecifies the type of message transmission. On this version, this parameter is not supported
[in]toPointer to an address structure indicating the destination address.
sockaddr:
- code for the address format. On this version only AF_INET is supported.
- socket address, the length depends on the code format
[in]tolenDestination address structure size
Returns
Zero on success, or negative error code on failure
See also
sl_Send
Note
Belongs to send_api
Warning
Example

Definition at line 296 of file sl_socket.c.

297 {
298  _SlSendtoMsg_u Msg;
299  _SlCmdCtrl_t CmdCtrl = {0, 0, 0};
300  _SlCmdExt_t CmdExt;
301  _i16 RetVal;
302 
303  /* verify that this api is allowed. if not allowed then
304  ignore the API execution and return immediately with an error */
305  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
306  /* RAW transceiver use only sl_Send */
307  if ((sd & SL_SOCKET_PAYLOAD_TYPE_MASK) == SL_SOCKET_PAYLOAD_TYPE_RAW_TRANCEIVER)
308  {
309  return SL_ERROR_BSD_SOC_ERROR;
310  }
311  else
312  {
313  if (Len < 1)
314  {
315  /* ignore */
316  return 0;
317  }
318  }
319 
320  _SlDrvResetCmdExt(&CmdExt);
321  CmdExt.TxPayload1Len = (_u16)Len;
322  CmdExt.pTxPayload1 = (_u8 *)pBuf;
323 
324  switch(to->sa_family)
325  {
326  case SL_AF_INET:
327  CmdCtrl.Opcode = SL_OPCODE_SOCKET_SENDTO;
328  CmdCtrl.TxDescLen = (_SlArgSize_t)sizeof(SlSocketAddrIPv4Command_t);
329  break;
330 #ifndef SL_TINY
331 #ifdef SL_SUPPORT_IPV6
332  case SL_AF_INET6:
333  CmdCtrl.Opcode = SL_OPCODE_SOCKET_SENDTO_V6;
334  CmdCtrl.TxDescLen = (_SlArgSize_t)sizeof(SlSocketAddrIPv6Command_t);
335  break;
336 #endif
337 #endif
338  case SL_AF_RF:
339  default:
340  return SL_RET_CODE_INVALID_INPUT;
341  }
342 
343  Msg.Cmd.IpV4.LenOrPadding = Len;
344  Msg.Cmd.IpV4.Sd = (_u8)sd;
345  _SlSocketBuildAddress(to, &Msg.Cmd);
346  Msg.Cmd.IpV4.FamilyAndFlags |= flags & 0x0F;
347 
348  RetVal = _SlDrvDataWriteOp((_SlSd_t)sd, &CmdCtrl, &Msg, &CmdExt);
349  if(SL_OS_RET_CODE_OK != RetVal)
350  {
351  return RetVal;
352  }
353 
354  return (_i16)Len;
355 }

§ sl_SetSockOpt()

_i16 sl_SetSockOpt ( _i16  sd,
_i16  level,
_i16  optname,
const void *  optval,
SlSocklen_t  optlen 
)

Set socket options-.

This function manipulate the options associated with a socket.
Options may exist at multiple protocol levels; they are always present at the uppermost socket level.
When manipulating socket options the level at which the option resides and the name of the option must be specified. To manipulate options at the socket level, level is specified as SOL_SOCKET. To manipulate options at any other level the protocol number of the appropriate proto- col controlling the option is supplied. For example, to indicate that an option is to be interpreted by the TCP protocol, level should be set to the protocol number of TCP;
The parameters optval and optlen are used to access optval - ues for setsockopt(). For getsockopt() they identify a buffer in which the value for the requested option(s) are to be returned. For getsockopt(), optlen is a value-result parameter, initially containing the size of the buffer pointed to by option_value, and modified on return to indicate the actual size of the value returned. If no option value is to be supplied or returned, option_value may be NULL.

Parameters
[in]sdSocket handle
[in]levelDefines the protocol level for this option
  • SL_SOL_SOCKET Socket level configurations (L4, transport layer)
  • SL_IPPROTO_IP IP level configurations (L3, network layer)
  • SL_SOL_PHY_OPT Link level configurations (L2, link layer)
[in]optnameDefines the option name to interrogate
  • SL_SOL_SOCKET
  • SL_SO_KEEPALIVE
    Enable/Disable periodic keep alive. Keeps TCP connections active by enabling the periodic transmission of messages
    Timeout is 5 minutes.
    Default: Enabled
    This options takes SlSockKeepalive_t struct as parameter
    • SL_SO_KEEPALIVETIME
      Set keep alive timeout. Value is in seconds
      Default: 5 minutes
    • SL_SO_RX_NO_IP_BOUNDARY
      Enable/Disable rx ip boundary. In connectionless socket (udp/raw), unread data is dropped (when recvfrom len parameter < data size), Enable this option in order to read the left data on the next recvfrom iteration Default: Disabled, IP boundary kept,
      This options takes SlSockRxNoIpBoundary_t struct as parameter
    • SL_SO_RCVTIMEO
      Sets the timeout value that specifies the maximum amount of time an input function waits until it completes.
      Default: No timeout
      This options takes SlTimeval_t struct as parameter
    • SL_SO_RCVBUF
      Sets tcp max recv window size.
      This options takes SlSockWinsize_t struct as parameter
    • SL_SO_NONBLOCKING
      Sets socket to non-blocking operation Impacts: connect, accept, send, sendto, recv and recvfrom.
      Default: Blocking. This options takes SlSockNonblocking_t struct as parameter
    • SL_SO_SECMETHOD
      Sets method to tcp secured socket (SL_SEC_SOCKET)
      Default: SL_SO_SEC_METHOD_SSLv3_TLSV1_2
      This options takes SlSockSecureMethod_t struct as parameter
    • SL_SO_SECURE_MASK
      Sets specific cipher to tcp secured socket (SL_SEC_SOCKET)
      Default: "Best" cipher suitable to method
      This options takes SlSockSecureMask_t struct as parameter
    • SL_SO_SECURE_FILES_CA_FILE_NAME
      Map secured socket to CA file by name
      This options takes _u8 buffer as parameter
    • SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME
      Map secured socket to private key by name
      This options takes _u8 buffer as parameter
    • SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME
      Map secured socket to certificate file by name
      This options takes _u8 buffer as parameter
    • SL_SO_SECURE_FILES_DH_KEY_FILE_NAME
      Map secured socket to Diffie Hellman file by name
      This options takes _u8 buffer as parameter
    • SL_SO_CHANGE_CHANNEL
      Sets channel in transceiver mode. This options takes _u32 as channel number parameter
    • SL_SO_SECURE_ALPN
      Sets the ALPN list. the parameter is a bit map consist of or of the following values - SL_SECURE_ALPN_H1 SL_SECURE_ALPN_H2 SL_SECURE_ALPN_H2C SL_SECURE_ALPN_H2_14 SL_SECURE_ALPN_H2_16 SL_SECURE_ALPN_FULL_LIST
  • SL_IPPROTO_IP
    • SL_IP_MULTICAST_TTL
      Set the time-to-live value of outgoing multicast packets for this socket.
      This options takes _u8 as parameter
    • SL_IP_ADD_MEMBERSHIP
      UDP socket, Join a multicast group.
      This options takes SlSockIpMreq_t struct as parameter
    • SL_IP_DROP_MEMBERSHIP
      UDP socket, Leave a multicast group
      This options takes SlSockIpMreq_t struct as parameter
    • SL_IP_RAW_RX_NO_HEADER
      Raw socket remove IP header from received data.
      Default: data includes ip header
      This options takes _u32 as parameter
    • SL_IP_HDRINCL
      RAW socket only, the IPv4 layer generates an IP header when sending a packet unless
      the IP_HDRINCL socket option is enabled on the socket.
      When it is enabled, the packet must contain an IP header.
      Default: disabled, IPv4 header generated by Network Stack
      This options takes _u32 as parameter
    • SL_IP_RAW_IPV6_HDRINCL (inactive)
      RAW socket only, the IPv6 layer generates an IP header when sending a packet unless
      the IP_HDRINCL socket option is enabled on the socket. When it is enabled, the packet must contain an IP header
      Default: disabled, IPv4 header generated by Network Stack
      This options takes _u32 as parameter
  • SL_SOL_PHY_OPT
    • SL_SO_PHY_RATE
      RAW socket, set WLAN PHY transmit rate
      The values are based on SlWlanRateIndex_e
      This options takes _u32 as parameter
    • SL_SO_PHY_TX_POWER
      RAW socket, set WLAN PHY TX power
      Valid rage is 1-15
      This options takes _u32 as parameter
    • SL_SO_PHY_NUM_FRAMES_TO_TX
      RAW socket, set number of frames to transmit in transceiver mode. Default: 1 packet This options takes _u32 as parameter
    • SL_SO_PHY_PREAMBLE
      RAW socket, set WLAN PHY preamble for Long/Short
      This options takes _u32 as parameter
    • SL_SO_PHY_TX_INHIBIT_THRESHOLD
      RAW socket, set WLAN Tx – Set CCA threshold.
      The values are based on SlTxInhibitThreshold_e
      This options takes _u32 as parameter
    • SL_SO_PHY_TX_TIMEOUT
      RAW socket, set WLAN Tx – changes the TX timeout (lifetime) of transceiver frames.
      Value in Ms, maximum value is 10ms
      This options takes _u32 as parameter
    • SL_SO_PHY_ALLOW_ACKS
      RAW socket, set WLAN Tx – Enable sending ACKs in transceiver mode
      0 = disabled / 1 = enabled
      This options takes _u32 as parameter
    • SL_SO_LINGER
      Socket lingers on close pending remaining send/receive packetst
    • SL_SO_SECURE_EXT_CLIENT_CHLNG_RESP
      Set with no parameter to indicate that the client uses external signature using netapp requesrt.
      needs netapp request handler
    • SL_SO_SECURE_DOMAIN_NAME_VERIFICATION
      Set a domain name, to check in ssl client connection.
[in]optvalSpecifies a value for the option
[in]optlenSpecifies the length of the option value
Returns
Zero on success, or negative error code on failure
Persistent
All params are Non- Persistent
See also
sl_getsockopt
Note
Belongs to basic_api
Warning
Examples
  • SL_SO_KEEPALIVE (disable Keepalive):
    SlSockKeepalive_t enableOption;
    enableOption.KeepaliveEnabled = 0;
    sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_KEEPALIVE, (_u8 *)&enableOption,sizeof(enableOption));

  • SL_SO_KEEPALIVETIME (Set Keepalive timeout):
    _i16 Status;
    _u32 TimeOut = 120;
    sl_SetSockOpt(Sd, SL_SOL_SOCKET, SL_SO_KEEPALIVETIME,( _u8*) &TimeOut, sizeof(TimeOut));

  • SL_SO_RX_NO_IP_BOUNDARY (disable boundary):
    enableOption.RxIpNoBoundaryEnabled = 1;
    sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_RX_NO_IP_BOUNDARY, (_u8 *)&enableOption,sizeof(enableOption));

  • SL_SO_RCVTIMEO:
    struct SlTimeval_t timeVal;
    timeVal.tv_sec = 1; // Seconds
    timeVal.tv_usec = 0; // Microseconds. 10000 microseconds resolution
    sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_RCVTIMEO, (_u8 *)&timeVal, sizeof(timeVal)); // Enable receive timeout

  • SL_SO_RCVBUF:
    size.Winsize = 3000; // bytes
    sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_RCVBUF, (_u8 *)&size, sizeof(size));

  • SL_SO_NONBLOCKING:
    SlSockNonblocking_t enableOption;
    enableOption.NonblockingEnabled = 1;
    sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_NONBLOCKING, (_u8 *)&enableOption,sizeof(enableOption)); // Enable/disable nonblocking mode

  • SL_SO_SECMETHOD:
    method.SecureMethod = SL_SO_SEC_METHOD_SSLV3; // security method we want to use
    SockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, SL_SEC_SOCKET);
    sl_SetSockOpt(SockID, SL_SOL_SOCKET, SL_SO_SECMETHOD, (_u8 *)&method, sizeof(method));

  • SL_SO_SECURE_MASK:
    cipher.SecureMask = SL_SEC_MASK_SSL_RSA_WITH_RC4_128_SHA; // cipher type
    SockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, SL_SEC_SOCKET);
    sl_SetSockOpt(SockID, SL_SOL_SOCKET, SL_SO_SECURE_MASK,(_u8 *)&cipher, sizeof(cipher));

  • SL_SO_SECURE_FILES_CA_FILE_NAME:
    sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_SECURE_FILES_CA_FILE_NAME,"exuifaxCaCert.der",strlen("exuifaxCaCert.der"));

  • SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME;
    sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME,"myPrivateKey.der",strlen("myPrivateKey.der"));

  • SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME:
    sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME,"myCertificate.der",strlen("myCertificate.der"));

  • SL_SO_SECURE_FILES_DH_KEY_FILE_NAME:
    sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_SECURE_FILES_DH_KEY_FILE_NAME,"myDHinServerMode.der",strlen("myDHinServerMode.der"));

  • SL_IP_MULTICAST_TTL:
    _u8 ttl = 20;
    sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_MULTICAST_TTL, &ttl, sizeof(ttl));

  • SL_IP_ADD_MEMBERSHIP:
    sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));

  • SL_IP_DROP_MEMBERSHIP:
    sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));

  • SL_SO_CHANGE_CHANNEL:
    _u32 newChannel = 6; // range is 1-13
    sl_SetSockOpt(SockID, SL_SOL_SOCKET, SL_SO_CHANGE_CHANNEL, &newChannel, sizeof(newChannel));

  • SL_SO_SECURE_ALPN:
    alpn.SecureALPN = SL_SECURE_ALPN_H2 | SL_SECURE_ALPN_H2_14;
    sl_SetSockOpt(SockID, SL_SOL_SOCKET, SL_SO_SECURE_ALPN, &alpn, sizeof(SlSockSecureALPN_t));

  • SL_IP_RAW_RX_NO_HEADER:
    _u32 header = 1; // remove ip header
    sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_RAW_RX_NO_HEADER, &header, sizeof(header));

  • SL_IP_HDRINCL:
    _u32 header = 1;
    sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_HDRINCL, &header, sizeof(header));

  • SL_IP_RAW_IPV6_HDRINCL:
    _u32 header = 1;
    sl_SetSockOpt(SockID, SL_IPPROTO_IP, SL_IP_RAW_IPV6_HDRINCL, &header, sizeof(header));

  • SL_SO_PHY_RATE:
    _u32 rate = 6; // see wlan.h SlWlanRateIndex_e for values
    sl_SetSockOpt(SockID, SL_SOL_PHY_OPT, SL_SO_PHY_RATE, &rate, sizeof(rate));

  • SL_SO_PHY_TX_POWER:
    _u32 txpower = 1; // valid range is 1-15
    sl_SetSockOpt(SockID, SL_SOL_PHY_OPT, SL_SO_PHY_TX_POWER, &txpower, sizeof(txpower));

  • SL_SO_PHY_NUM_FRAMES_TO_TX:
    _u32 numframes = 1;
    sl_SetSockOpt(SockID, SL_SOL_PHY_OPT, SL_SO_PHY_NUM_FRAMES_TO_TX, &numframes, sizeof(numframes));

  • SL_SO_PHY_PREAMBLE:
    _u32 preamble = 1;
    sl_SetSockOpt(SockID, SL_SOL_PHY_OPT, SL_SO_PHY_PREAMBLE, &preamble, sizeof(preamble));

  • SL_SO_PHY_TX_INHIBIT_THRESHOLD:
    _u32 thrshld = SL_TX_INHIBIT_THRESHOLD_MED;
    sl_SetSockOpt(SockID, SL_SOL_PHY_OPT, SL_SO_PHY_TX_INHIBIT_THRESHOLD , &thrshld, sizeof(thrshld));

  • SL_SO_PHY_TX_TIMEOUT:
    _u32 timeout = 50;
    sl_SetSockOpt(SockID, SL_SOL_PHY_OPT, SL_SO_PHY_TX_TIMEOUT , &timeout, sizeof(timeout));

  • SL_SO_PHY_ALLOW_ACKS:
    _u32 acks = 1; // 0 = disabled / 1 = enabled
    sl_SetSockOpt(SockID, SL_SOL_PHY_OPT, SL_SO_PHY_ALLOW_ACKS, &acks, sizeof(acks));

  • SL_SO_LINGER:
    linger.l_onoff = 1;
    linger.l_linger = 10;
    sl_SetSockOpt(SockID, SL_SOL_SOCKET, SL_SO_LINGER, &linger, sizeof(linger));

  • SL_SO_SECURE_EXT_CLIENT_CHLNG_RESP:
    int dummy;
    sl_SetSockOpt(SockID, SL_SOL_SOCKET, SL_SO_SECURE_EXT_CLIENT_CHLNG_RESP, &dummy, sizeof(dummy));

  • SL_SO_SECURE_DOMAIN_NAME_VERIFICATION:
    sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_SECURE_DOMAIN_NAME_VERIFICATION,"www.google.co.il",strlen("www.google.co.il"));

Definition at line 943 of file sl_socket.c.

944 {
945  _SlSetSockOptMsg_u Msg;
946  _SlCmdExt_t CmdExt;
947 
948  /* verify that this api is allowed. if not allowed then
949  ignore the API execution and return immediately with an error */
950  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
951 
952  _SlDrvResetCmdExt(&CmdExt);
953  CmdExt.TxPayload1Len = optlen;
954  CmdExt.pTxPayload1 = (_u8 *)optval;
955 
956  Msg.Cmd.Sd = (_u8)sd;
957  Msg.Cmd.Level = (_u8)level;
958  Msg.Cmd.OptionLen = (_u8)optlen;
959  Msg.Cmd.OptionName = (_u8)optname;
960 
961  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlSetSockOptCmdCtrl, &Msg, &CmdExt));
962 
963  return (_i16)Msg.Rsp.StatusOrLen;
964 }

§ sl_Socket()

_i16 sl_Socket ( _i16  Domain,
_i16  Type,
_i16  Protocol 
)

Create an endpoint for communication.

The socket function creates a new socket of a certain socket type, identified by an integer number, and allocates system resources to it.
This function is called by the application layer to obtain a socket handle.

Parameters
[in]DomainSpecifies the protocol family of the created socket. For example:
  • SL_AF_INET for network protocol IPv4
  • SL_AF_INET6 for network protocol IPv6
  • SL_AF_RF for starting transceiver mode. Notes:
    • sending and receiving any packet overriding 802.11 header
    • for optimized power consumption the socket will be started in TX only mode until receive command is activated
[in]Typespecifies the communication semantic, one of:
  • SL_SOCK_STREAM (reliable stream-oriented service or Stream Sockets)
  • SL_SOCK_DGRAM (datagram service or Datagram Sockets)
  • SL_SOCK_RAW (raw protocols atop the network layer)
  • when used with AF_RF:
    • SL_SOCK_DGRAM - L2 socket
    • SL_SOCK_RAW - L1 socket - bypass WLAN CCA (Clear Channel Assessment)
[in]Protocolspecifies a particular transport to be used with the socket.
The most common are
  • SL_IPPROTO_TCP
  • SL_IPPROTO_UDP The value 0 may be used to select a default protocol from the selected domain and type
Returns
On success, socket handle that is used for consequent socket operations.
A successful return code should be a positive number (int16)
On error, a negative (int16) value will be returned specifying the error code.
  • SL_EAFNOSUPPORT - illegal domain parameter
  • SL_EPROTOTYPE - illegal type parameter
  • SL_EACCES - permission denied
  • SL_ENSOCK - exceeded maximal number of socket
  • SL_ENOMEM - memory allocation error
  • SL_EINVAL - error in socket configuration
  • SL_EPROTONOSUPPORT - illegal protocol parameter
  • SL_EOPNOTSUPP - illegal combination of protocol and type parameters
See also
sl_Close
Note
belongs to basic_api
Warning

Definition at line 143 of file sl_socket.c.

144 {
145  _SlSockSocketMsg_u Msg;
146 
147  Msg.Cmd.Domain = (_u8)Domain;
148  Msg.Cmd.Type = (_u8)Type;
149  Msg.Cmd.Protocol = (_u8)Protocol;
150 
151  /* verify that this api is allowed. if not allowed then
152  ignore the API execution and return immediately with an error */
153  VERIFY_API_ALLOWED(SL_OPCODE_SILO_SOCKET);
154 
155  VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlSockSocketCmdCtrl, &Msg, NULL));
156 
157  if( Msg.Rsp.StatusOrLen < 0 )
158  {
159  return ( Msg.Rsp.StatusOrLen);
160  }
161  else
162  {
163  return (_i16)((_u8)Msg.Rsp.Sd);
164  }
165 }

Data Structure Documentation

§ SlInAddr_t

struct SlInAddr_t

Definition at line 221 of file sl_socket.h.

Data Fields
_u32 s_addr
union S_un S_un

§ SlIn6Addr_t

struct SlIn6Addr_t

Definition at line 235 of file sl_socket.h.

Data Fields
union SlIn6Addr_t _S6_un

§ SlIn6Addr_t._S6_un

union SlIn6Addr_t._S6_un

Definition at line 237 of file sl_socket.h.

Data Fields
_u32 _S6_u32[4]
_u8 _S6_u8[16]

§ SlSockKeepalive_t

struct SlSockKeepalive_t

Definition at line 246 of file sl_socket.h.

Data Fields
_u32 KeepaliveEnabled

§ SlSockReuseaddr_t

struct SlSockReuseaddr_t

Definition at line 251 of file sl_socket.h.

Data Fields
_u32 ReuseaddrEnabled

§ SlSockRxNoIpBoundary_t

struct SlSockRxNoIpBoundary_t

Definition at line 256 of file sl_socket.h.

Data Fields
_i32 RxIpNoBoundaryEnabled

§ SlSockWinsize_t

struct SlSockWinsize_t

Definition at line 262 of file sl_socket.h.

Data Fields
_u32 WinSize

§ SlSockNonblocking_t

struct SlSockNonblocking_t

Definition at line 267 of file sl_socket.h.

Data Fields
_u32 NonBlockingEnabled

§ SlSocketAsyncEvent_t

struct SlSocketAsyncEvent_t

Definition at line 272 of file sl_socket.h.

Data Fields
_i8 pExtraInfo[128]
_u8 Sd
_u8 Type
_i16 Val

§ SlSockTxFailEventData_t

struct SlSockTxFailEventData_t

Definition at line 280 of file sl_socket.h.

Data Fields
_u8 Padding
_u8 Sd
_i16 Status

§ SlSockEventData_u

union SlSockEventData_u

Definition at line 288 of file sl_socket.h.

Data Fields
SlSocketAsyncEvent_t SockAsyncData
SlSockTxFailEventData_t SockTxFailData

§ SlSockEvent_t

struct SlSockEvent_t

Definition at line 295 of file sl_socket.h.

Data Fields
_u32 Event
SlSockEventData_u SocketAsyncEvent

§ SlSockTriggerEvent_t

struct SlSockTriggerEvent_t

Definition at line 301 of file sl_socket.h.

Data Fields
_u32 Event
_u32 EventData

§ SlSockSecureALPN_t

struct SlSockSecureALPN_t

Definition at line 308 of file sl_socket.h.

Data Fields
_u32 SecureALPN

§ SlSockSecureMask_t

struct SlSockSecureMask_t

Definition at line 313 of file sl_socket.h.

Data Fields
_u32 SecureMask

§ SlSockSecureMethod_t

struct SlSockSecureMethod_t

Definition at line 318 of file sl_socket.h.

Data Fields
_u8 SecureMethod

§ SlSockSSLCertInfo_t

struct SlSockSSLCertInfo_t

Definition at line 323 of file sl_socket.h.

Data Fields
_i8 FromDate[8]
_i8 IssuerName[SL_MAX_ISSUER_AND_SUBJECT_NAME_LEN]
_i8 IssuerNameLen
_u16 IssuerNameXoredSha1
_i8 Padding[2]
_i8 SubjectName[SL_MAX_ISSUER_AND_SUBJECT_NAME_LEN]
_i8 SubjectNameLen
_u16 SubjectNameXoredSha1
_i8 ToDate[8]

§ SlSockSSLConnectionParams_t

struct SlSockSSLConnectionParams_t

Definition at line 337 of file sl_socket.h.

Data Fields
_u32 SecureALPNChosenProtocol
_u32 SecureCipherSuit
_u32 SecureIsPeerValidated
SlSockSSLCertInfo_t SecurePeerCertinfo
_u32 SecureVersion

§ SlSockIpMreq_t

struct SlSockIpMreq_t

Definition at line 360 of file sl_socket.h.

Data Fields
SlInAddr_t imr_interface
SlInAddr_t imr_multiaddr

§ SlSockIpV6Mreq_t

struct SlSockIpV6Mreq_t

Definition at line 366 of file sl_socket.h.

Data Fields
_u32 ipv6mr_interface
SlIn6Addr_t ipv6mr_multiaddr

§ SlSocklinger_t

struct SlSocklinger_t

Definition at line 371 of file sl_socket.h.

Data Fields
_u32 l_linger
_u32 l_onoff

§ SlTimeval_t

struct SlTimeval_t

Definition at line 381 of file sl_socket.h.

Data Fields
SlTime_t tv_sec
SlSuseconds_t tv_usec

§ SlSockAddr_t

struct SlSockAddr_t

Definition at line 390 of file sl_socket.h.

Data Fields
_u8 sa_data[14]
_u16 sa_family

§ SlSockAddrIn6_t

struct SlSockAddrIn6_t

Definition at line 397 of file sl_socket.h.

Data Fields
SlIn6Addr_t sin6_addr
_u16 sin6_family
_u32 sin6_flowinfo
_u16 sin6_port
_u32 sin6_scope_id

§ SlSockAddrIn_t

struct SlSockAddrIn_t

Definition at line 408 of file sl_socket.h.

Data Fields
SlInAddr_t sin_addr
_u16 sin_family
_u16 sin_port
_i8 sin_zero[8]

§ SlSockSecureFiles_t

struct SlSockSecureFiles_t

Definition at line 417 of file sl_socket.h.

Data Fields
_u8 SecureFiles[4]

§ SlFdSet_t

struct SlFdSet_t

Definition at line 423 of file sl_socket.h.

Data Fields
_u32 fd_array[(SL_FD_SETSIZE+(_u8) 31)/(_u8) 32]

§ SlTransceiverRxOverHead_t

struct SlTransceiverRxOverHead_t

Definition at line 428 of file sl_socket.h.

Data Fields
_u8 Channel
_u8 Padding
_u8 Rate
_i8 Rssi
_u32 Timestamp