简体   繁体   中英

c# sockets blocking

Say I have a TcpClient that I accept from a TcpServer in c#, and for some reason it keeps defaulting with blocking off. Is there some other force that can change how the socket blocking is set? Like say is it affected by the remote connection at all?

I know I set blocking to fale a few builds back, but I changed it, and even introduced the TcpClient instead of a straight socket. I haven't specifically changed the blocking back to true, I just commented blocking = false out. Is that something that persists maybe with the endpoint?

I don't know though it just seemed that as I was programming one day my sockets just became unruley without any real change in their code.

public void GetAcceptedSocket(TcpClient s)
{
    try
    {
        sock = s;
        IPEndPoint remoteIpEndPoint = s.Client.RemoteEndPoint as IPEndPoint;
        strHost = remoteIpEndPoint.Address.ToString();
        intPort = remoteIpEndPoint.Port;
        ipEnd = remoteIpEndPoint;
        sock.ReceiveTimeout = 10000;
        boolConnected = true;
        intLastPing = 0;
        LastPingSent = DateTime.Now;
        LastPingRecieved = DateTime.Now;
        handleConnect(strHost, intPort);
        oThread = new Thread(new ThreadStart(this.run));
        oThread.Start();
    }
    catch (Exception e)
    {
        handleError(e, "Connect method: " + e.Message);
    }
}

Like say is it affected by the remote connection at all?

Nope.

It would have been better if you show some code where you create Socket or TcpClient in server side. I cannot find TcpServer class in C#. Are you talking about TcpListener ? If you are, please make it sure that you set Socket's Blocking true if you use AcceptSocket to create a new socket. If you call AcceptTcpClient , you should not worry about blocking or non-blocking mode as TcpClient is always blocking mode.

The TcpClient class provides simple methods for connecting, sending, and receiving stream data over a network in synchronous blocking mode .

from MSDN .

There really is no answer, I've never duplicated this, and after a few months, and a fresh windows install, picked the code up, and didn't have the problem anymore. Very weird though, defiantly couldn't find a programmatic reasoning for it happening. Like I said, after a few months it just kinda worked? They should really have an 'Unawnserable' option :p.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM