[英]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
,但這是處理此問題的最佳方法嗎? 有沒有更優雅的方式? 有很多電話要send
和recv
。
將其強制轉換為const char *
,應在兩個平台上均進行編譯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.