本人从网上下了一个小程序,在2000系统运行正常,
但是在NT(4.0,SP5)下编译通过却运行有问题,问题出在
const char chOpt = 1;
int nErr = setsockopt(pContext->m_Socket, IPPROTO_TCP, TCP_NODELAY, &chOpt,
sizeof(char));
setsockopt函数原型为:
int setsockopt(
SOCKET s,
int level,
int optname,
const char FAR *optval,
int optlen
);
跟踪程序发现错误码为WSAEFAULT,意思是“ ‘optval’ is not in a valid part of t
he process address space or ‘optlen’ parameter is too small.”这是什么问题?为什么在2000系统中运行正常呢?
但是在NT(4.0,SP5)下编译通过却运行有问题,问题出在
const char chOpt = 1;
int nErr = setsockopt(pContext->m_Socket, IPPROTO_TCP, TCP_NODELAY, &chOpt,
sizeof(char));
setsockopt函数原型为:
int setsockopt(
SOCKET s,
int level,
int optname,
const char FAR *optval,
int optlen
);
跟踪程序发现错误码为WSAEFAULT,意思是“ ‘optval’ is not in a valid part of t
he process address space or ‘optlen’ parameter is too small.”这是什么问题?为什么在2000系统中运行正常呢?
int nErr = setsockopt(pContext->m_Socket, IPPROTO_TCP, TCP_NODELAY, &chOpt,
sizeof(BOOL));
cannot convert parameter 4 from 'const int *' to 'const char *'用reinterpret_cast强制类型转换后错误跟原来一样。但是,
const char chOpt = 1;//(不变)
int nErr = setsockopt(pContext->m_Socket, IPPROTO_TCP, TCP_NODELAY, &chOpt,sizeof(BOOL));//char --> BOOL 后运行正常,问题解决,
但不知道这样改是否可以?或有何依据?请教,马上给分