DaemonSocket.cpp
上传用户:surprise9
上传日期:2007-01-04
资源大小:426k
文件大小:3k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // This is part of the WAR SOFTWARE SERIES initiated by Jarle Aase
  2. // Copyright 1996 by Jarle Aase. All rights reserved.
  3. // See the "War Software Series Licende Agreement" for details concerning 
  4. // use and distribution.
  5. // ---
  6. // This source code, executables and programs containing source code or
  7. // binaries or proprietetary technology from the War Software Series are
  8. // NOT alloed used, viewed or tested by any governmental agencies in
  9. // any countries. This includes the government, departments, police, 
  10. // military etc.
  11. // ---
  12. // This file is intended for use with Tab space = 2
  13. // Created and maintained in MSVC Developer Studio
  14. // ---
  15. // NAME : DaemonSocket.cpp
  16. // PURPOSE : Sockets special to WAR daemons
  17. // PROGRAM : 
  18. // DATE : Nov. 14 1996
  19. // AUTHOR : Jarle Aase
  20. // ---
  21. // REVISION HISTORY
  22. //
  23. #include "stdafx.h"
  24. #include "WarDaemon.h"
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30. ///////////////////////////////////////////////////////////////////////////////////////
  31. // CDaemonServiceSocket
  32. CDaemonServiceSocket::CDaemonServiceSocket()
  33. {
  34. }
  35. CDaemonServiceSocket::~CDaemonServiceSocket()
  36. {
  37. LogMsg(LOGF_DEBUG,"~CDaemonServiceSocket() - Killing all children.");
  38. KillAllChildren();
  39. };
  40. BOOL CDaemonServiceSocket::DoAccept(CSock *NewSocket )
  41. {
  42. if (CSock::DoAccept(NewSocket))
  43. {
  44. // Link the socket
  45. NewSocket->m_Father = this;
  46. return TRUE;
  47. }
  48. return FALSE;
  49. }
  50. BOOL CDaemonServiceSocket::Initialize(int PortNumber, LPCSTR ServiceName, LPCSTR ListenIP)
  51. {
  52. char buf[127];
  53. int err;
  54. SOCKADDR sa;
  55. SOCKADDR_IN *s_in = (SOCKADDR_IN *)&sa;
  56. int Len = sizeof(SOCKADDR);
  57. memset(&sa,0,Len);
  58. m_SocketName = ServiceName;
  59. m_PortNumber = PortNumber;
  60. if (!Create(PortNumber,SOCK_STREAM,FD_ACCEPT,ListenIP))
  61. {
  62. err = GetLastError();
  63. if (err == WSAEADDRINUSE)
  64. LogMsg(LOGF_ERROR,"Some other service is already using the specified port.");
  65. else
  66. {
  67. sprintf(buf,"CDaemonServiceSocket::Initialize(): Create(%d) failed.", PortNumber);
  68. LogLastError(LOGF_ERROR,err,buf);
  69. }
  70. delete this;
  71. return FALSE;
  72. }
  73. if (!AsyncSelect(FD_ACCEPT))
  74. {
  75. LogLastError(LOGF_ERROR,0,"CDaemonServiceSocket::Initialize(): AsyncSelect(FD_ACCEPT) failed");
  76. delete this;
  77. return FALSE;
  78. }
  79. if (!Listen())
  80. {
  81. LogLastError(LOGF_ERROR,0,"CDaemonServiceSocket::Initialize(): Listen() failed.");
  82. delete this;
  83. return FALSE;
  84. }
  85. GetSockName(&sa, &Len);
  86. if (m_Log)
  87. {
  88. m_Log->LogMsg(LOGF_SYSTEM,"%s daemon online on %d.%d.%d.%d port %u", 
  89. SafeStringIndex(DaemonTypes,m_Type, LT_INVALID),
  90. s_in->sin_addr.S_un.S_un_b.s_b1,
  91. s_in->sin_addr.S_un.S_un_b.s_b2,
  92. s_in->sin_addr.S_un.S_un_b.s_b3,
  93. s_in->sin_addr.S_un.S_un_b.s_b4,
  94. ntohs(s_in->sin_port));
  95. }
  96. return TRUE;
  97. }