internal Socket UpdateAcceptSocket(Socket socket, EndPoint remoteEP, bool needCancelSelect) { // // Internal state of the socket is inherited from listener // socket.addressFamily = addressFamily; socket.socketType = socketType; socket.protocolType = protocolType; socket.m_RightEndPoint = m_RightEndPoint; socket.m_RemoteEndPoint = remoteEP; // // the socket is connected // socket.SetToConnected(); // // if the socket is returned by an Endb), the socket might have // inherited the WSAEventSelect() call from the accepting socket. // we need to cancel this otherwise the socket will be in non-blocking // mode and we cannot force blocking mode using the ioctlsocket() in // Socket.set_Blocking(), since it fails returing 10022 as documented in MSDN. // (note that the m_AsyncEvent event will not be created in this case. // socket.willBlock = willBlock; if (needCancelSelect) { socket.UnsetAsyncEventSelect(); } else { // We need to make sure the Socket is in the right blocking state // even if we don't have to call UnsetAsyncEventSelect socket.InternalSetBlocking(willBlock); } return socket; }
internal Socket UpdateAcceptSocket(Socket socket, EndPoint remoteEP, bool needCancelSelect) { socket.addressFamily = this.addressFamily; socket.socketType = this.socketType; socket.protocolType = this.protocolType; socket.m_RightEndPoint = this.m_RightEndPoint; socket.m_RemoteEndPoint = remoteEP; socket.SetToConnected(); socket.willBlock = this.willBlock; if (needCancelSelect) socket.UnsetAsyncEventSelect(); else socket.InternalSetBlocking(this.willBlock); return socket; }