Socket ошибка при прослушивании
От: milvic  
Дата: 08.12.06 14:41
Оценка:
код ошибки: 10053
текст: An established connection was aborted by the software in your host machine
мой код:
Socket socket = SocketUtils.ConnectSocket("10.20.6.30", 11010);
byte [] sendByte = new byte [3] {8, 0, 0};
socket.Send(sendByte);
byte [] receive = new byte[4] {0,0,0,0};
socket.Receive(receive);
Thread.Sleep(200);
socket.Send(sendByte);
socket.Receive(receive);
Если убрать Thread.Sleep(200);
то во втором вызове socket.Receive()
происходит вышеуказанная ошибка.
Кто нибудь сталкивался с похожей проблемой, Есть ли решение, помимо усыпления потока?
Спасибо.
Re: Socket ошибка при прослушивании
От: Morpheus_  
Дата: 08.12.06 15:31
Оценка:
Здравствуйте, milvic, Вы писали:

M>код ошибки: 10053

M>текст: An established connection was aborted by the software in your host machine
M>мой код:
M>Socket socket = SocketUtils.ConnectSocket("10.20.6.30", 11010);
M>byte [] sendByte = new byte [3] {8, 0, 0};
M>socket.Send(sendByte);
M>byte [] receive = new byte[4] {0,0,0,0};
M>socket.Receive(receive);
M>Thread.Sleep(200);
M>socket.Send(sendByte);
M>socket.Receive(receive);
M>Если убрать Thread.Sleep(200);
M>то во втором вызове socket.Receive()
M>происходит вышеуказанная ошибка.
M>Кто нибудь сталкивался с похожей проблемой, Есть ли решение, помимо усыпления потока?

не наблюдал такого, хотя аналогичный код юзается довольно часто... а может у вас в коде какойнить параллельный поток делает Close() ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Socket ошибка при прослушивании
От: Morpheus_  
Дата: 08.12.06 15:32
Оценка:
кстати проверьте стоит ли у вас вызов Shutdown(SocketShutdown.Both); перед Close
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Socket ошибка при прослушивании
От: Morpheus_  
Дата: 08.12.06 15:33
Оценка:
M_>кстати проверьте стоит ли у вас вызов Shutdown(SocketShutdown.Both); перед Close

в том числе и на серверной стороне
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Socket ошибка при прослушивании
От: milvic  
Дата: 08.12.06 15:48
Оценка:
Здравствуйте, Morpheus_, Вы писали:

M_>Здравствуйте, milvic, Вы писали:


M>>код ошибки: 10053

M>>текст: An established connection was aborted by the software in your host machine
M>>мой код:
M>>Socket socket = SocketUtils.ConnectSocket("10.20.6.30", 11010);
M>>byte [] sendByte = new byte [3] {8, 0, 0};
M>>socket.Send(sendByte);
M>>byte [] receive = new byte[4] {0,0,0,0};
M>>socket.Receive(receive);
M>>Thread.Sleep(200);
M>>socket.Send(sendByte);
M>>socket.Receive(receive);
M>>Если убрать Thread.Sleep(200);
M>>то во втором вызове socket.Receive()
M>>происходит вышеуказанная ошибка.
M>>Кто нибудь сталкивался с похожей проблемой, Есть ли решение, помимо усыпления потока?

M_>не наблюдал такого, хотя аналогичный код юзается довольно часто... а может у вас в коде какойнить параллельный поток делает Close() ?


это однопоточный, тестовый пример
Re[4]: Socket ошибка при прослушивании
От: milvic  
Дата: 08.12.06 15:54
Оценка:
Здравствуйте, Morpheus_, Вы писали:

M_>>кстати проверьте стоит ли у вас вызов Shutdown(SocketShutdown.Both); перед Close


M_>в том числе и на серверной стороне


Могу проверить только клиентскую сторону, сервер для меня black box, считается что он без багов.
Shutdown нигде не вызываю
Re[4]: Socket ошибка при прослушивании
От: milvic  
Дата: 08.12.06 15:57
Оценка:
Здравствуйте, Morpheus_, Вы писали:

M_>>кстати проверьте стоит ли у вас вызов Shutdown(SocketShutdown.Both); перед Close


M_>в том числе и на серверной стороне


Может я сокет както криво создаю?

public static Socket ConnectSocket(string server, int port)
{
Socket s = null;
IPHostEntry hostEntry = Dns.GetHostEntry(server);
foreach (IPAddress address in hostEntry.AddressList)
{
IPEndPoint ipe = new IPEndPoint(address, port);
Socket tempSocket =
new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

tempSocket.Connect(ipe);

if (tempSocket.Connected)
{
s = tempSocket;
break;
}
else
{
continue;
}
}
return s;
}
вообщето пример взят из мздн-а, если уж там криво, то где не криво.
Re[5]: Socket ошибка при прослушивании
От: Morpheus_  
Дата: 08.12.06 16:46
Оценка:
Здравствуйте, milvic, Вы писали:

M>Здравствуйте, Morpheus_, Вы писали:


M_>>>кстати проверьте стоит ли у вас вызов Shutdown(SocketShutdown.Both); перед Close


M_>>в том числе и на серверной стороне


M>Могу проверить только клиентскую сторону, сервер для меня black box, считается что он без багов.

M>Shutdown нигде не вызываю

а нужно бы вызвать
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Socket ошибка при прослушивании
От: Morpheus_  
Дата: 08.12.06 17:18
Оценка:
Здравствуйте, milvic, Вы писали:

M_>>>кстати проверьте стоит ли у вас вызов Shutdown(SocketShutdown.Both); перед Close


M_>>в том числе и на серверной стороне


M>Может я сокет както криво создаю?


M> public static Socket ConnectSocket(string server, int port)

M> {
M> Socket s = null;
M> IPHostEntry hostEntry = Dns.GetHostEntry(server);
M> foreach (IPAddress address in hostEntry.AddressList)
M> {
M> IPEndPoint ipe = new IPEndPoint(address, port);
M> Socket tempSocket =
M> new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

M> tempSocket.Connect(ipe);


M> if (tempSocket.Connected)

M> {
M> s = tempSocket;
M> break;
M> }
M> else
M> {
M> continue;
M> }
M> }
M> return s;
M> }
M>вообщето пример взят из мздн-а, если уж там криво, то где не криво.

вполне возможно что баг на сервере, особенно если сервер не тестили корректно ли он работает...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Socket ошибка при прослушивании
От: Morpheus_  
Дата: 08.12.06 17:25
Оценка:
кстати после Receive следует проверить сколько байт реально прочиталось, если меньше чем нужно, то нужно вызывать еще раз Receive (чтобы дочитать оставшиеся байты (передав разумеется скорректированный offset)) и так до тех пор пока не прочитаются все байты.
Хотя в данном случае для 4 байт это наверно не актуально, проблемы возникнут если читать блок данных больше системного буфера, тогда Receive будет возвращать не весь запрошенный объем а порциями...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Socket ошибка при прослушивании
От: milvic  
Дата: 11.12.06 09:07
Оценка:
Здравствуйте, Morpheus_, Вы писали:
M_>а нужно бы вызвать

Вызвал перед закрытием с параметром SocketShutdown.Both
но, как бы, не помогло ..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.