在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);
似乎应该有更优雅的解决方案在同一条数据上使用这两个函数。
同样重要的是要注意,尽管这可能有效,但我可能需要从代码中删除所有类型转换。有没有办法解决这个没有类型转换,隐式或显式?
答案 0 :(得分:0)
除了更改pBuffer本身的数据类型之外,我没有找到更优雅的解决方案。