public IOControl ( int ioControlCode, byte optionInValue, byte optionOutValue ) : int | ||
ioControlCode | int | |
optionInValue | byte | |
optionOutValue | byte | |
Результат | int |
public int IOControl(int ioControlCode, byte[] optionInValue, byte[] optionOutValue)
{
if (CleanedUp)
{
throw new ObjectDisposedException(this.GetType().FullName);
}
int realOptionLength = 0;
//
// IOControl is used for Windows-specific IOCTL operations. If we need to add support for IOCTLs specific
// to other platforms, we will likely need to add a new API, as the control codes may overlap with those
// from Windows. Generally it would be preferable to add new methods/properties to abstract these across
// platforms, however.
//
// This can throw ObjectDisposedException.
SocketError errorCode = SocketPal.WindowsIoctl(_handle, ioControlCode, optionInValue, optionOutValue, out realOptionLength);
if (NetEventSource.IsEnabled) NetEventSource.Info(this, $"Interop.Winsock.WSAIoctl returns errorCode:{errorCode}");
// Throw an appropriate SocketException if the native call fails.
if (errorCode != SocketError.Success)
{
// Update the internal state of this socket according to the error before throwing.
SocketException socketException = new SocketException((int)errorCode);
UpdateStatusAfterSocketError(socketException);
if (NetEventSource.IsEnabled) NetEventSource.Error(this, socketException);
throw socketException;
}
return realOptionLength;
}
Socket::IOControl ( IOControlCode ioControlCode, byte optionInValue, byte optionOutValue ) : int |
public void RunReciever() { ListenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); try { // Setup the Socket ListenSocket.Bind(new IPEndPoint(IPAddress.Parse(p_HostIP), 0)); ListenSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1); ListenSocket.IOControl(unchecked((int) 0x98000001), new byte[4] {1, 0, 0, 0}, new byte[4]); while (true) //Infinite Loop keeps the Socket in Listen { ListenSocket.BeginReceive(p_PacketBuffer, 0, p_PacketBufferSize, SocketFlags.None, new AsyncCallback(CallReceive), this); while (ListenSocket.Available == 0) // If no Data Sleep the thread for 1ms then check to see if there is data to be read { Thread.Sleep(1); } } } catch (ThreadAbortException){}// Catch the ThreadAbort Exception that gets generated whenever a thread is closed with the Thread.Abort() method catch (Exception e) {new ErrorHandle(e);} finally //Shutdown the Socket when finished { if (ListenSocket != null) { ListenSocket.Shutdown(SocketShutdown.Both); ListenSocket.Close(); } } }