comm.cpp
上传用户:zhangjjyh
上传日期:2021-11-11
资源大小:1251k
文件大小:1k
源码类别:

P2P编程

开发平台:

Objective-C

  1. //////////////////////////////////////////////////
  2. // comm.cpp文件
  3. #include <winsock2.h>
  4. #include <windows.h>
  5. #include "Ws2tcpip.h"
  6. #include "comm.h"
  7. USHORT checksum(USHORT* buff, int size)
  8. {
  9. unsigned long cksum = 0;
  10. while(size>1)
  11. {
  12. cksum += *buff++;
  13. size -= sizeof(USHORT);
  14. }
  15. // 是奇数
  16. if(size)
  17. {
  18. cksum += *(UCHAR*)buff;
  19. }
  20. // 将32位的chsum高16位和低16位相加,然后取反
  21. cksum = (cksum >> 16) + (cksum & 0xffff);
  22. cksum += (cksum >> 16);
  23. return (USHORT)(~cksum);
  24. }
  25. BOOL SetTTL(SOCKET s, int nValue)
  26. {
  27. int ret = ::setsockopt(s, IPPROTO_IP, IP_TTL, (char*)&nValue, sizeof(nValue));
  28. return ret != SOCKET_ERROR;
  29. }
  30. BOOL SetTimeout(SOCKET s, int nTime, BOOL bRecv)
  31. {
  32. int ret = ::setsockopt(s, SOL_SOCKET, 
  33. bRecv ? SO_RCVTIMEO : SO_SNDTIMEO, (char*)&nTime, sizeof(nTime));
  34. return ret != SOCKET_ERROR;
  35. }