Почему буферы в функциях VxWorks sendto() и send() имеют разные типы и как обращаться с ними одинаковым образом?

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

Просто кажется, что должно быть более элегантное решение для использования этих двух функций на одном и том же фрагменте данных.

Также важно отметить, что, хотя это может сработать, мне может потребоваться удалить все приведения типов из моего кода. Есть ли способ решить эту проблему без приведения типов, неявного или явного?


person Littlegator    schedule 09.07.2012    source источник


Ответы (1)


Кроме изменения типа данных самого pBuffer, я не нашел более элегантного решения.

person Littlegator    schedule 25.07.2012