在 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);
似乎应该有一个更优雅的解决方案来在同一条数据上使用这两个函数。
同样重要的是要注意,虽然这可能有效,但我可能需要从我的代码中删除所有类型转换。有没有办法在没有类型转换、隐式或显式的情况下解决这个问题?