0

在 VxWorks 中,sendto() 定义为:

int sendto
(
  int               s,      /* socket to send data to */
  caddr_t           buf,    /* pointer to data buffer */
  int               bufLen, /* length of buffer */
  int               flags,  /* flags to underlying protocols */
  struct sockaddr * to,     /* recipient's address */
  int               tolen   /* length of to sockaddr */
)

send() 定义为:

int send
(
  int          s,           /* socket to send to */
  const char * buf,         /* pointer to buffer to transmit */
  int          bufLen,      /* length of buffer */
  int          flags        /* flags to underlying protocols */
)

我的问题是 sendto() 中的缓冲区不是恒定的,而 send() 中的缓冲区是。这似乎不符合 POSIX 标准。我还在编写我的代码以进行交叉编译,因此缓冲区作为 const void* 而不是 const char* 传入。如果不一样,我可以通过调用以下函数来使函数执行类似的操作:

//assuming socket data is already populated

send(fileDescriptor, 
   reinterpret_cast<const char*>(pBuffer),
   bufferLength,
   flags);

sendto(fileDescriptor,
   const_cast<char*>(reinterpret_cast<const char*>(pBuffer)),
   bufferLength,
   flags,
   destinationAddr,
   destAddrlen);

似乎应该有一个更优雅的解决方案来在同一条数据上使用这两个函数。

同样重要的是要注意,虽然这可能有效,但我可能需要从我的代码中删除所有类型转换。有没有办法在没有类型转换、隐式或显式的情况下解决这个问题?

4

1 回答 1

0

除了更改 pBuffer 本身的数据类型之外,我没有找到更优雅的解决方案。

于 2012-07-25T17:43:52.720 回答