0

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 つの関数を使用するには、より洗練されたソリューションが必要なようです。

これは機能するかもしれませんが、コードからすべての型キャストを削除する必要があるかもしれないことに注意することも重要です。暗黙的または明示的な型キャストなしでこれに取り組む方法はありますか?

4

1 に答える 1

0

pBuffer 自体のデータ型を変更する以外に、より洗練された解決策は見つかりませんでした。

于 2012-07-25T17:43:52.720 に答える