Hallo,
ich schlage mich mit einem Problem herum, für das ich bisher keine Lösung im Web gefunden habe:
Ich möchte ein KeepAlive bei einer Socketverbindung aktivieren, damit ein Verbindungsabbruch detektiert werden kann. Bei WinXP funktioniert das auch gut. Wenn ich mit Wireshark sniffe, dann werden regelmäßig KeepAlive Packete gesendet. Wenn ich das gleiche Programm unter Win7 laufen lassen fehlen diese KeepAlive Packete. Ich möchte das KeepAlive nicht über die Registry festlegen, da es dann für alle Verbindungen gilt.
Folgenden Code verwende ich:
uint dummy = 0;
byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
BitConverter.GetBytes((uint)(keepaliveTime)).CopyTo(inOptionValues, 0);
BitConverter.GetBytes((uint)keepaliveTime).CopyTo(inOptionValues, Marshal.SizeOf(dummy));
BitConverter.GetBytes((uint)keepaliveInterval).CopyTo(inOptionValues,Marshal.SizeOf(dummy) * 2);
// write to Socket IOControl
socket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);
Hat jemad eine Idee, woran es liegen kann?
Vielen Dank für die Nachfrage: Der Rückgabewert ist unter XP und Win7 jeweils 0, das ist aber auch nicht verwunderlich, da er die Anzahl der Bytes im OptionOutValue angibt, der ist aber bei mir in diesem Fall "null".