haze4real
haze4real

Reputation: 738

C#: AsyncCallback not being called on Socket.BeginReceive

I have a serious problem with the asynchronous Receive method of System.Net.Sockets.Socket.

Here is the code I use to open the connection:

_socket = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
_socket.Connect(endpoint);

byte[] buffer = new byte[1024];
_socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, buffer);

and here is the callback method:

private void ReceiveCallback(IAsyncResult result)
{
     byte[] buffer = (byte[])result.AsyncState;
     int count = _socket.EndReceive(result);

     if (count > 0)
     {
          // Do something
     }

     buffer = new byte[1024];
     _socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, buffer);
}

The problem is that the ReceiveCallback is never being called, despite the socket being connected.

Can anyone help me out on this one?

Upvotes: 4

Views: 6295

Answers (1)

jgauffin
jgauffin

Reputation: 101192

First of all, do not ignore if EndRecieve returns 0 bytes. It means that the connection have been closed by the remote end point.

Are you sure that the remote endpoint have sent something to you? My bet is that that is not the case.

I've done quite a few socket applications and I have never had any problems with the callback not being called.

It's also very important that you handle exceptions in callback methods. Not doing so will make your application crash when an exception is being thrown.

Upvotes: 5

Related Questions