代码如下:=======================代码摘录===========================
//sendto发送UDP数据包
int count = sendto( data->socketFd, (char*)buffer, length, 0 ,(struct sockaddr*)&xDest, sizeof(sockaddr_in) );//这里记录日志
cpLog( LOG_ERR, "errNO=[%d], count=%d, socket=%d, strlen_buffer=%d, length=%d, port=[%d], family=%d, sin_addr=[%s]",WSAGetLastError(), count,data->socketFd, strlen(buffer), length, ntohs(xDest.sin_port), xDest.sin_family, inet_ntoa(xDest.sin_addr)  );
==========================================================结果如下:========================日志中的内容======================
errNO=[0], count=-1, socket=3376, strlen_buffer=4, length=32, port=[19116], family=2, sin_addr=[192.168.0.1]
==========================================================注释:
1、sendto中的缓冲区buffer是个流媒体,所以通过strlen()取出的长度为4是正常的;
2、日志信息表明,WSAGetLastError()的返回值0是正常,但是sendto函数的返回值却是-1表示发送失败,其他参数的值打印出来都是正确的;
3、该语句在windows 2003,windows xp, windows 2000 上都没有问题,但是在Windows98和WindowsME 中执行时,会出现日志中的情况;
有谁知道这个问题吗???困扰多日了;

解决方案 »

  1.   

    改为int count = sendto( data->socketFd, (char*)buffer, length, 0 ,(struct sockaddr*)&xDest, sizeof(sockaddr_in) );
    int error = WSAGetLastError();
    //这里记录日志
    cpLog( LOG_ERR, "errNO=[%d], count=%d, socket=%d, strlen_buffer=%d, length=%d, port=[%d], family=%d, sin_addr=[%s]",error, count,data->socketFd, strlen(buffer), length, ntohs(xDest.sin_port), xDest.sin_family, inet_ntoa(xDest.sin_addr)  );再看错误码是多少
      

  2.   

    在2000下没问题,98下就不行? 系统和SOCKET版本的问题吧