为什么VxWorks中的缓冲区是sendto()和send()函数的不同类型,我如何以相同的方式处理它们?

时间:2012-07-09 19:39:04

标签: c++ sockets send vxworks sendto

在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);

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

同样重要的是要注意,尽管这可能有效,但我可能需要从代码中删除所有类型转换。有没有办法解决这个没有类型转换,隐式或显式?

1 个答案:

答案 0 :(得分:0)

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