From b69bbef34028d4273e8f721e43239920b022fe12 Mon Sep 17 00:00:00 2001 From: Doron Somech Date: Mon, 18 Jul 2016 09:59:37 +0300 Subject: [PATCH 1/3] add travis build for linux and osx --- .travis.yml | 52 ++++++++++++++++++++++++++++++++++++++++++++++ src/NetMQ-Core.sln | 1 + 2 files changed, 53 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..ddf5c53e2 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,52 @@ +#language: csharp + +# dotnet cli require Ubuntu 14.04 +sudo: required +dist: trusty + +# dotnet cli require OSX 10.10 +#osx_image: xcode7.1 + +addons: + apt: + packages: + - gettext + - libcurl4-openssl-dev + - libicu-dev + - libssl-dev + - libunwind8 + - zlib1g + +os: +# - osx + - linux + +env: + - CLI_VERSION=latest + +before_install: + # Install OpenSSL + - if test "$TRAVIS_OS_NAME" == "osx"; then + brew update; + brew install openssl; + brew link --force openssl; + fi + +install: + + # Download script to install dotnet cli + - curl -L --create-dirs https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0/scripts/obtain/dotnet-install.sh -o ./scripts/install.sh + + - export DOTNET_INSTALL_DIR="$PWD/.dotnetcli" + + # Install the latest versio of dotnet CLI + - bash ./scripts/install.sh --version "$CLI_VERSION" --install-dir "$DOTNET_INSTALL_DIR" --no-path + + # Add dotnet to PATH + - export PATH="$DOTNET_INSTALL_DIR:$PATH" + +script: + - dotnet restore src/ + + # testing only netcoreapp1.0 on linux and osx + - dotnet test src/NetMQ.Tests -f netcoreapp1.0 \ No newline at end of file diff --git a/src/NetMQ-Core.sln b/src/NetMQ-Core.sln index cbcf1637e..9b844ab05 100644 --- a/src/NetMQ-Core.sln +++ b/src/NetMQ-Core.sln @@ -9,6 +9,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution ProjectSection(SolutionItems) = preProject ..\.gitattributes = ..\.gitattributes ..\.gitignore = ..\.gitignore + ..\.travis.yml = ..\.travis.yml ..\COPYING.LESSER = ..\COPYING.LESSER global.json = global.json ..\mkdocs.yml = ..\mkdocs.yml From e84f96dcce31e3815e160b0cda751bbf5c11640e Mon Sep 17 00:00:00 2001 From: Doron Somech Date: Mon, 18 Jul 2016 10:14:44 +0300 Subject: [PATCH 2/3] Fix exception on linux --- src/NetMQ/Core/Transports/Tcp/TcpListener.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/NetMQ/Core/Transports/Tcp/TcpListener.cs b/src/NetMQ/Core/Transports/Tcp/TcpListener.cs index a526dad5f..fc14de8e9 100644 --- a/src/NetMQ/Core/Transports/Tcp/TcpListener.cs +++ b/src/NetMQ/Core/Transports/Tcp/TcpListener.cs @@ -22,6 +22,7 @@ You should have received a copy of the GNU Lesser General Public License using System; using System.Diagnostics; using System.Net.Sockets; +using System.Runtime.InteropServices; using AsyncIO; using JetBrains.Annotations; @@ -136,7 +137,13 @@ public virtual void SetAddress([NotNull] string addr) } } +#if NETSTANDARD1_3 + // This command is failing on linux + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + m_handle.ExclusiveAddressUse = false; +#else m_handle.ExclusiveAddressUse = false; +#endif m_handle.Bind(m_address.Address); m_handle.Listen(m_options.Backlog); From d8a3221ec65989f0e09d02c2f977bade63f3a76f Mon Sep 17 00:00:00 2001 From: Doron Somech Date: Mon, 18 Jul 2016 11:23:13 +0300 Subject: [PATCH 3/3] upgrade AsyncIO version --- src/NetMQ-Core.sln | 1 + src/NetMQ/Core/Transports/Tcp/TcpListener.cs | 38 +++++++------------- src/NetMQ/project.json | 2 +- 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/src/NetMQ-Core.sln b/src/NetMQ-Core.sln index 9b844ab05..e1f384c3e 100644 --- a/src/NetMQ-Core.sln +++ b/src/NetMQ-Core.sln @@ -14,6 +14,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution global.json = global.json ..\mkdocs.yml = ..\mkdocs.yml ..\README.md = ..\README.md + ..\travis.yml = ..\travis.yml EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{FF13931E-D7A0-489E-9530-0F972DAE1167}" diff --git a/src/NetMQ/Core/Transports/Tcp/TcpListener.cs b/src/NetMQ/Core/Transports/Tcp/TcpListener.cs index fc14de8e9..46a6dcf6d 100644 --- a/src/NetMQ/Core/Transports/Tcp/TcpListener.cs +++ b/src/NetMQ/Core/Transports/Tcp/TcpListener.cs @@ -50,7 +50,7 @@ internal class TcpListener : Own, IProactorEvents /// /// socket being accepted /// - private AsyncSocket m_acceptedSocket; + //private AsyncSocket m_acceptedSocket; /// /// Socket the listener belongs to. @@ -164,10 +164,10 @@ public virtual void SetAddress([NotNull] string addr) private void Accept() { - m_acceptedSocket = AsyncSocket.Create(m_address.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp); + //m_acceptedSocket = AsyncSocket.Create(m_address.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // start accepting socket async - m_handle.Accept(m_acceptedSocket); + m_handle.Accept(); // Disable TIME_WAIT tcp state if (m_options.DisableTimeWait) @@ -187,12 +187,13 @@ public void InCompleted(SocketError socketError, int bytesTransferred) case SocketError.Success: { // TODO: check TcpFilters + var acceptedSocket = m_handle.GetAcceptedSocket(); - m_acceptedSocket.NoDelay = true; + acceptedSocket.NoDelay = true; if (m_options.TcpKeepalive != -1) { - m_acceptedSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, m_options.TcpKeepalive); + acceptedSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, m_options.TcpKeepalive); if (m_options.TcpKeepaliveIdle != -1 && m_options.TcpKeepaliveIntvl != -1) { @@ -204,12 +205,12 @@ public void InCompleted(SocketError socketError, int bytesTransferred) bytes.PutInteger(endian, m_options.TcpKeepaliveIdle, 4); bytes.PutInteger(endian, m_options.TcpKeepaliveIntvl, 8); - m_acceptedSocket.IOControl(IOControlCode.KeepAliveValues, (byte[])bytes, null); + acceptedSocket.IOControl(IOControlCode.KeepAliveValues, (byte[])bytes, null); } } // Create the engine object for this connection. - var engine = new StreamEngine(m_acceptedSocket, m_options, m_endpoint); + var engine = new StreamEngine(acceptedSocket, m_options, m_endpoint); // Choose I/O thread to run connector in. Given that we are already // running in an I/O thread, there must be at least one available. @@ -223,7 +224,7 @@ public void InCompleted(SocketError socketError, int bytesTransferred) SendAttach(session, engine, false); - m_socket.EventAccepted(m_endpoint, m_acceptedSocket); + m_socket.EventAccepted(m_endpoint, acceptedSocket); Accept(); break; @@ -231,17 +232,14 @@ public void InCompleted(SocketError socketError, int bytesTransferred) case SocketError.ConnectionReset: case SocketError.NoBufferSpaceAvailable: case SocketError.TooManyOpenSockets: - { - m_acceptedSocket.Dispose(); + { m_socket.EventAcceptFailed(m_endpoint, socketError.ToErrorCode()); Accept(); break; } default: - { - m_acceptedSocket.Dispose(); - + { NetMQException exception = NetMQException.Create(socketError); m_socket.EventAcceptFailed(m_endpoint, exception.ErrorCode); @@ -267,19 +265,7 @@ private void Close() { m_socket.EventCloseFailed(m_endpoint, ex.SocketErrorCode.ToErrorCode()); } - - if (m_acceptedSocket != null) - { - try - { - m_acceptedSocket.Dispose(); - } - catch (SocketException) - { - } - } - - m_acceptedSocket = null; + m_handle = null; } diff --git a/src/NetMQ/project.json b/src/NetMQ/project.json index fa3cc67d6..d0b9ba4c3 100644 --- a/src/NetMQ/project.json +++ b/src/NetMQ/project.json @@ -19,7 +19,7 @@ "keyFile": "./NetMQ.snk" }, "dependencies": { - "AsyncIO": "0.1.23", + "AsyncIO": "0.1.26", "JetBrains.Annotations": { "version": "10.1.5", "type": "build"