私はposix(BSD)ソケットを使ってWindowsに(winsockを使って)移植しています。これは問題ありませんが、私はsend
で問題に遭遇しました(私はrecv
に同じ問題があるかもしれないと思います)。 Windows上のクロスプラットフォームソケット送信、バッファconst void *、Linuxのconst char *、Windowsでの処理に最適な方法は?
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ことがある(hereを参照してください):Linuxでは、この関数は、シグネチャ(hereを参照)がある
int send(
_In_ SOCKET s,
_In_ const char *buf,
_In_ int len,
_In_ int flags
);
を、私は問題を抱えている最初の場所では、このようなデストラクタである:
ExtSocketHandler::~ExtSocketHandler(void)
{
if (pUS->GetSock() >= 0) {
uint8_t u = ES_ABORT;
// ignore result
(void)send(pUS->GetSock(), (void *)&u, sizeof(u), send_flags);
}
SAFEDELETE(pUS);
}
ライン
(void)send(pUS->GetSock(), (void *)&u, sizeof(u), send_flags);
は、void*
のようにウィンドウでコンパイルエラーが発生すると、const char*
にキャストできません。
ここでは、すべての呼び出しをラップしてWindows用の#ifdef
に送信することができますが、これを処理するにはこれが最善の方法ですか?よりエレガントな方法がありますか?対処するにはsend
とrecv
への呼び出しがかなりあります。 const char *
へ
キャストをコンパイルする必要がありますか? – Holt
ところで、Windowsでは 'SOCKET'型は符号なしなので、' if(pUS-> GetSock()> = 0) 'を実行することはできません。代わりに 'INVALID_SOCKET'と比較してください。 –
@Tulon、チップをありがとう! – crobar