|
using System;
using System.Net;
using System.Net.Sockets;
namespace Hik.Communication.Scs.Client.Tcp
{
/// <summary>
/// This class is used to simplify TCP socket operations.
/// </summary>
internal static class TcpHelper
{
/// <summary>
/// This code is used to connect to a TCP socket with timeout option.
/// </summary>
/// <param name="endPoint">IP endpoint of remote server</param>
/// <param name="timeoutMs">Timeout to wait until connect</param>
/// <returns>Socket object connected to server</returns>
/// <exception cref="SocketException">Throws SocketException if can not connect.</exception>
/// <exception cref="TimeoutException">Throws TimeoutException if can not connect within specified timeoutMs</exception>
public static Socket ConnectToServer(EndPoint endPoint, int timeoutMs)
{
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
socket.Blocking = false;
socket.Connect(endPoint);
socket.Blocking = true;
return socket;
}
catch (SocketException socketException)
{
if (socketException.ErrorCode != 10035)
{
socket.Close();
throw;
}
if (!socket.Poll(timeoutMs * 1000, SelectMode.SelectWrite))
{
socket.Close();
throw new TimeoutException("The host failed to connect. Timeout occured.");
}
socket.Blocking = true;
return socket;
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I have started programming at 14 years old using Pascal as hobby. Then I interested in web development (HTML, JavaScript, ASP...) before university.
I graduated from Sakarya University Computer Engineering. At university, I learned C++, Visual Basic.NET, C#, ASP.NET and Java. I partly implemented ARP, IP and TCP protocols in Java as my final term project.
Now, I am working on Windows and web based software development mostly using Microsoft technologies in my own company.
My open source projects:
* ABP Framework:
https://abp.io
* jTable:
http://jtable.org
* Others:
https://github.com/hikalkan
My personal web site:
https://halilibrahimkalkan.com