本人从网上下了一个小程序,在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系统中运行正常呢?

解决方案 »

  1.   

    const BOOL chOpt = 1;
    int nErr = setsockopt(pContext->m_Socket, IPPROTO_TCP, TCP_NODELAY, &chOpt,   
     
                          sizeof(BOOL));
      

  2.   

    现在的error是:
    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  后运行正常,问题解决,
                          但不知道这样改是否可以?或有何依据?请教,马上给分