Brunet.Transport.TcpEdgeListener.CreationState.Start C# (CSharp) Method

Start() public method

public Start ( SocketState ss ) : void
ss SocketState
return void
      public override void Start(SocketState ss) {
        object result = Result.Value;
        if( result != null ) {
          TcpEdge new_edge = result as TcpEdge;
          if( new_edge != null ) {
            //Tell the world about the new Edge:
            ss.AddEdge(new_edge);
            ECB(true, new_edge, null); 
          }
          else {
            ECB(false, null, (Exception)result); 
          }
        }
        else {
          //Try to make a new start:
          if( IPAddressQueue.Count <= 0 ) {
            ECB(false, null, new EdgeException("No more IP Addresses"));
          }
          else {
            Socket s = null;
            try {
              s = new Socket(AddressFamily.InterNetwork,
                                   SocketType.Stream,
                                   ProtocolType.Tcp);
              s.Blocking = false;
              ss.AddCreationState(s, this);
              IPAddress ipaddr = (IPAddress)IPAddressQueue.Dequeue();
              IPEndPoint end = new IPEndPoint(ipaddr, Port);
              //This is a hack because of a bug in MS.Net and Mono:
              //https://bugzilla.novell.com/show_bug.cgi?id=349449
              //http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=332142
              s.Bind(new IPEndPoint(IPAddress.Any, 0));
              s.Connect(end);
            }
            catch(SocketException sx) {
              if( sx.SocketErrorCode != SocketError.WouldBlock ) {
                if( s != null ) {
                  ss.TakeCreationState(s);
                }
                ECB(false, null, new EdgeException(false, "Could not Connect", sx)); 
              }
              /* else Ignore the non-blocking socket error */
            }
          }
        }
      }
    }