В 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);
Просто кажется, что должно быть более элегантное решение для использования этих двух функций на одном и том же фрагменте данных.
Также важно отметить, что, хотя это может сработать, мне может потребоваться удалить все приведения типов из моего кода. Есть ли способ решить эту проблему без приведения типов, неявного или явного?