贴段代码:
SOCKET mySock=socket(AF_INET, SOCK_STREAM, 0);
HANDLE myEvent=CreateEvent(NULL, FALSE, FALSE, NULL);
WSAOVERLAPPED wsaOverlapped;
wsaOverlapped.hEvent = myEvent;
int nRet=WSAIoctl(mySock,SIO_ADDRESS_LIST_CHANGE,NULL,0,NULL,0,NULL,&wsaOverlapped,NULL);代码执行到WSAIoctl函数,sock,event都已经成功创建了。
WSAIoctl返回一个错误结果-1,返回的错误码:WSAEFAULT
10014
Bad address.
The system detected an invalid pointer address in attempting to use a pointer argument of a call. This error occurs if an application passes an invalid pointer value, or if the length of the buffer is too small. For instance, if the length of an argument, which is a sockaddr structure, is smaller than the sizeof(sockaddr).错误码表明该函数可能是传入了一个非法的指针,或者是传入的buffer太小。
这个函数WSAIoctl仅仅是发送一个SIO_ADDRESS_LIST_CHANGE请求,还要向inputbuffer,outputbuffer传入值吗?
我试着用WSASocket函数生成sock,结果依然是错误。
请遇到类似情况的朋友不吝赐教,谢谢了。

解决方案 »

  1.   


    SOCKET sokt;
    HANDLE hChgEvent;
    WSAOVERLAPPED ovlp;
    DWORD dwRead;
    int nRetVal; sokt = socket(AF_INET, SOCK_STREAM, 0);
    hChgEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    memset(&ovlp, 0, sizeof(ovlp));
    ovlp.hEvent = hChgEvent;
    nRetVal = WSAIoctl(sokt, SIO_ADDRESS_LIST_CHANGE, NULL, 0, NULL, 0, &dwRead, &ovlp, NULL);
    NSys::WaitOject(hChgEvent);
    我这一切正常
      

  2.   

    谢谢zzz3265的回复,问题已基本解决了,我先前向lpcbBytesReturned参数传入了一个空值,导致出错。