簡體   English   中英

跨平台套接字發送,在Windows上的linux const char *上緩沖const void *,最好的處理方式?

[英]Cross-platform socket send, buffer const void* on linux const char* on windows, best way to handle?

我正在將使用posix(BSD)套接字的程序移植到Windows(使用Winsock)。 可以,但是我遇到了send的問題(我認為recv可能有同樣的問題)。 在Linux上,此函數具有簽名(請參見此處 ):

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

在Windows上(參見此處 ):

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);

導致Windows上的編譯器錯誤,因為void*無法轉換為const char*

現在,我想可以包裝所有調用以在Windows中發送#ifdef ,但這是處理此問題的最佳方法嗎? 有沒有更優雅的方式? 有很多電話要sendrecv

將其強制轉換為const char * ,應在兩個平台上均進行編譯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM