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 char* ではなく const void* として渡されます。以下のように関数を呼び出すことで、同じではないにしても同様に機能する関数を取得できます。
//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);
同じデータに対してこれら 2 つの関数を使用するには、より洗練されたソリューションが必要なようです。
これは機能するかもしれませんが、コードからすべての型キャストを削除する必要があるかもしれないことに注意することも重要です。暗黙的または明示的な型キャストなしでこれに取り組む方法はありますか?