setsockopt返回-1,WSAGetLastError报WSAEFAULT(10014)问题求助
WinSock中setsockopt返回WSAEFAULT(10014)的问题排查与解决
错误原因
你遇到的WSAEFAULT(10014)错误,根源在于setsockopt调用时传入了无效指针:
nRet = setsockopt(nSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)nOptVal, nOptLen);
这里直接将int变量nOptVal的数值(1)强转为const char*类型,相当于把内存地址0x1传给了函数——这个地址属于无效的系统内存区域,系统检测到非法指针后返回WSAEFAULT错误。
解决方法
setsockopt的第4个参数需要传入选项值的内存地址,而非数值本身。修改代码为:
int nOptVal = 1; int nOptLen = sizeof(nOptVal); // 传入nOptVal的地址,再强转为const char* nRet = setsockopt(nSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&nOptVal, nOptLen);
修正后,函数将正确读取nOptVal所在内存中的值(1),调用即可正常返回0。
内容的提问来源于stack exchange,提问作者Ajay Ram
相关产品推荐
相关产品推荐

