Vielen Dank für die Antworten!
Letztendlich ruft ein Disconnect (unter Windows) diesen Code auf
[...]
Durch das CloseSocket ist das Socket
Handle ungültig [...]
Dadurch kann man nach dem Schliessen nicht mehr sinnvoll auf das Socket
Handle zugreifen.
Der Client kann daher auch nicht mehr prüfen, ob noch irgendetwas vom Server gesendet wird.
Wenn ich mich an die Microsoft-Doku halte, dann gehört zwischen
Shutdown und
CloseSocket dass man wartet dass die Gegenseite auch zumacht.
Indy zieht einfach den Stecker.
https://msdn.microsoft.com/de-de/lib...(v=vs.85).aspx
oder
Zitat:
Call shutdown with how=SD_SEND.
Call recv or WSARecv until the function completes with success and indicates zero bytes were received. If SOCKET_ERROR is returned, then the graceful disconnect is not possible.
Call closesocket.
Quelle
.net kann das doch auch, warum kann ich mit Delphi/
Indy noch nicht mal einen
TCP-Socket vernünftig schließen?
Code:
using System;
using System.Net.Sockets;
namespace ConsoleApplication1
{
class Program
{
const String ipAddress = "192.168.86.116";
const ushort portNo = 502;
static void TestReconnect()
{
Socket socket = new TcpClient().Client;
socket.Connect(ipAddress, portNo);
socket.Disconnect(reuseSocket : true); // bei false ist das Verhalten wie bei Delphi/
Indy
}
static void Main(string[] args)
{
TestReconnect();
TestReconnect();
Console.WriteLine("end.");
Console.ReadLine();
}
}
}
Ich schaue mir mal ICS an. Sonst kenne ich keine Alternativen zu
Indy