Доброго времени суток.
Есть следущая проблема — функции класса Socket, Send/Shutdown/Close работают как мне кажется, не так как должны.
Они всегда возвращаются мгновенно, хотя по идее должны блокировать (для Close при LingerState с таймаутом). Close к тому же не закрывает соединение.
Код следующий (подключение к ФТП серверу. Макс. скорость на сервере ограничена в 1KB/s):
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect("127.0.0.1", 21);
s.Receive(reply);
s.Send(user);
s.Receive(reply);
s.Send(pass);
s.Receive(reply);
int bytesSent = s.Send(data); // data - маcсив размером в пол-мегабайта
s.Shutdown(SocketShutdown.Both);
s.Close();
Этот код выполняется мгновенно, bytesSent == пол-мегабайта, Shutdown и Close никак не влияют. После выполнения кода фтп сервер продолжает получать данные из data.
Пробывал тоже самое с классом TcpClient, всё точно так же.
Вопрос: это нормальное поведение, и если нет, то что это может быть ?
Спасибо.