我正在使用winsock2
在C++中編寫套接字程序,我試圖使用WSAAccept
來有條件地接受連接。我複製了來自MSDN的示例ConditionalFunction,以獲取WSAAccept中的lpfnCondition
參數,如下所示。嘗試檢索指針的內容時程序崩潰
SOCKET WSAAccept(
_In_ SOCKET s,
_Out_ struct sockaddr *addr,
_Inout_ LPINT addrlen,
_In_ LPCONDITIONPROC lpfnCondition, //<---------
_In_ DWORD_PTR dwCallbackData
);
試圖訪問在ConditionalFunction
像這樣WSABUF buffer = *lpCallerData
我的程序崩潰的lpCallerId
內容然而,當。我知道這是問題的根源,因爲當我發表評論時,我的程序不會崩潰。我不認爲我的所有代碼都是必需的。任何幫助將是可愛的。
編輯:
CALLBACK ConditionalAccept(LPWSABUF lpCallerId,LPWSABUF lpCallerData,LPQOS lpSQOS,
LPQOS lpGQOS,LPWSABUF lpCalleeId,LPWSABUF lpCalleeData,
GROUP *g,DWORD_PTR dwCallbackData)
{
WSABUF buffer = *lpCallerData;
if (lpSQOS != NULL) {
RtlZeroMemory(lpSQOS, sizeof(QOS));
return CF_ACCEPT;
} else
return CF_REJECT;
}
...
WSAAccept(slisten, (SOCKADDR*)&acceptSock, &Size, &ConditionalAccept, NULL);
請嘗試創建一個[最小化,完整和可驗證示例](http://stackoverflow.com/help/mcve),您可以向我們顯示。 –
什麼是'lpCallerData'? – immibis
如果您可以閱讀有關此參數的MSDN文檔:這些參數中的信息與連接請求一起發送。 *如果沒有主叫方標識或主叫方數據可用,則相應的參數將爲NULL *。 –