Coffeehouse Thread

4 posts

Forum Read Only

This forum has been made read only by the site admins. No new threads or comments can be added.

System.Net.Sockets.Socket bug?

Back to Forum: Coffeehouse
  • User profile image
    Ion Todirel


    i working on a FTP client using Sockets, and i have a problem in detecting if Socket is still conected, before i will send a command to server using Socket.Send method. This code is not working:

    // Conection with server ...... OK
    // Server response ............. 220

    // before sending a command (ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref10/html/P_System_Net_Sockets_Socket_Connected.htm)
    bool blockingState = clientSocket.Blocking;
    [] tmp = new byte[1];
         clientSocket.Blocking = false
         clientSocket.Send(tmp, 1, 0);

    (loggedIn = false);
         clientSocket.Blocking = blockingState;

    then i try with this (detect connection timeout):
    if (clientSocket.Available > 0)
          if (response.Code == 426)
             return (loggedIn
    = false);

    if i use and Receive method (after Send) all will be OK but why in MSDN docs its say that we can use Send or Receive? seems that Send is not working? it's may be a problem with server (not IIS)?.

    after all this code Socket.Connected is still true, even if i stopped server (after establishing connection with it, and send some commands).

  • User profile image
    Mike Dimmick

    Go and read the Winsock Programmer's FAQ. That'll answer a lot of questions about how to use sockets effectively.

    The only way the client can tell that the server has disconnected (if disconnected gracefully) is by reading all the data until the receive function returns 0 bytes. Until that point it doesn't see the FIN flag. The server doesn't set the FIN flag in a transmitted packet until it's sent all buffered data.

    In the case of an abnormal disconnection, eventually you'll either get a timeout, or you'll get an error response to sent data if the server sets the RST (Reset) flag in a response packet.

    The Connected state basically just means that you've successfully performed the three-way handshake to set up a connection (client sends SYN, server sends SYN-ACK, client sends ACK). Beyond that point it doesn't really have any significance.

  • User profile image
    Ion Todirel

    why Socket class does't support events? (OnClose, OnResonse...)

  • User profile image

    Maybe because it can't detect it?

Conversation locked

This conversation has been locked by the site admins. No new comments can be made.