SockConnector.cpp
上传用户:baixin
上传日期:2008-03-13
资源大小:4795k
文件大小:2k
开发平台:

MultiPlatform

  1. /* SockConnector */
  2. /* Copyright (c) 1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01b,17dec01,nel  Add include symbol for diab build.
  7. 01a,05jun99,aim  created
  8. */
  9. #include "SockConnector.h"
  10. /* Include symbol for diab */
  11. extern "C" int include_vxdcom_SockConnector (void)
  12.     {
  13.     return 0;
  14.     }
  15. SockConnector::~SockConnector ()
  16.     {
  17.     TRACE_CALL;
  18.     }
  19. SockConnector::SockConnector ()
  20.     {
  21.     TRACE_CALL;
  22.     }
  23. SockConnector::SockConnector
  24.     (
  25.     SockStream& stream,
  26.     const SockAddr& sockAddr,
  27.     int reuseAddr,
  28.     int protocolFamily,
  29.     int protocol
  30.     )
  31.     {
  32.     TRACE_CALL;
  33.     connect (stream, sockAddr, reuseAddr, protocolFamily, protocol);
  34.     }
  35. int
  36. SockConnector::connect
  37.     (
  38.     SockStream& stream,
  39.     const SockAddr& sockAddr,
  40.     int reuseAddr,
  41.     int protocolFamily,
  42.     int protocol
  43.     )
  44.     {
  45.     TRACE_CALL;
  46.     if (stream.handleInvalid ())
  47. {
  48. // open on a new socket descriptor
  49. if (stream.open (SOCK_STREAM,
  50.  protocolFamily,
  51.  protocol,
  52.  reuseAddr) < 0)
  53.     return -1; // cannot open
  54. }
  55.     sockaddr* remoteAddr = 0;
  56.     if (sockAddr.clone (remoteAddr) != -1)
  57. {
  58. size_t size = sockAddr.size ();
  59. REACTOR_HANDLE handle = stream.handleGet ();
  60. if (::connect (handle, remoteAddr, size) < 0)
  61.     stream.close ();
  62. #if 0
  63. if (::bind (handle, remoteAddr, size) < 0)
  64.     stream.close ();
  65. else if (::connect (handle, remoteAddr, size) < 0)
  66.     stream.close ();
  67. #endif
  68. }
  69.     delete remoteAddr;
  70.     return stream.handleInvalid () ? -1 : 0;
  71.     }