mirror of
https://github.com/zeromq/libzmq.git
synced 2024-12-12 18:40:27 +01:00
initial changes for win port
This commit is contained in:
parent
87ccbb9fae
commit
f895426c18
@ -25,7 +25,6 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#if defined MSC_VER && defined ZMQ_BUILDING_LIBZMQ
|
||||
#define ZMQ_EXPORT __declspec(dllexport)
|
||||
@ -35,6 +34,8 @@ extern "C" {
|
||||
|
||||
// Maximal size of "Very Small Message". VSMs are passed by value
|
||||
// to avoid excessive memory allocation/deallocation.
|
||||
// If VMSs larger than 255 bytes are required, type of 'vsm_size'
|
||||
// field in zmq_msg_t structure should be modified accordingly.
|
||||
#define ZMQ_MAX_VSM_SIZE 30
|
||||
|
||||
// Message & notification types.
|
||||
@ -98,7 +99,7 @@ struct zmq_msg_t
|
||||
{
|
||||
void *content;
|
||||
unsigned char shared;
|
||||
uint16_t vsm_size;
|
||||
unsigned char vsm_size;
|
||||
unsigned char vsm_data [ZMQ_MAX_VSM_SIZE];
|
||||
};
|
||||
|
||||
|
520
msvc/libzmq/libzmq.vcproj
Normal file
520
msvc/libzmq/libzmq.vcproj
Normal file
@ -0,0 +1,520 @@
|
||||
<?xml version="1.0" encoding="windows-1250"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="libzmq"
|
||||
ProjectGUID="{641C5F36-32EE-4323-B740-992B651CF9D6}"
|
||||
RootNamespace="libzmq"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
CommandLine="copy ..\platform.hpp ..\..\src"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
GenerateDebugInformation="true"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
CommandLine="copy ..\platform.hpp ..\..\src"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
GenerateDebugInformation="true"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\src\app_thread.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\devpoll.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\dispatcher.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\epoll.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\err.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\fd_signaler.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\io_object.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\io_thread.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\ip.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\kqueue.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\object.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\options.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\owned.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\pipe.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\poll.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\select.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\session.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\socket_base.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\tcp_connecter.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\tcp_listener.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\tcp_socket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\thread.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\uuid.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\ypollset.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_connecter.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_connecter_init.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_decoder.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_encoder.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_engine.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_listener.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_listener_init.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\src\app_thread.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\atomic_bitmap.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\atomic_counter.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\atomic_ptr.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\command.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\config.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\decoder.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\devpoll.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\dispatcher.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\encoder.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\epoll.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\err.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\fd.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\fd_signaler.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\i_endpoint.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\i_engine.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\i_inout.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\i_poll_events.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\i_poller.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\i_signaler.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\io_object.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\io_thread.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\ip.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\kqueue.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\msg_content.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\mutex.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\object.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\options.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\owned.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\pipe.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\platform.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\poll.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\select.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\session.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\simple_semaphore.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\socket_base.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\stdint.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\tcp_connecter.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\tcp_listener.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\tcp_socket.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\thread.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\uuid.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\windows.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\wire.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\ypipe.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\ypollset.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\yqueue.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_connecter.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_connecter_init.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_decoder.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_encoder.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_engine.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_listener.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\zmq_listener_init.hpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
20
msvc/msvc.sln
Normal file
20
msvc/msvc.sln
Normal file
@ -0,0 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||
# Visual C++ Express 2008
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libzmq", "libzmq\libzmq.vcproj", "{641C5F36-32EE-4323-B740-992B651CF9D6}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{641C5F36-32EE-4323-B740-992B651CF9D6}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{641C5F36-32EE-4323-B740-992B651CF9D6}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{641C5F36-32EE-4323-B740-992B651CF9D6}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{641C5F36-32EE-4323-B740-992B651CF9D6}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
59
msvc/platform.hpp
Normal file
59
msvc/platform.hpp
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
Copyright (c) 2007-2009 FastMQ Inc.
|
||||
|
||||
This file is part of 0MQ.
|
||||
|
||||
0MQ is free software; you can redistribute it and/or modify it under
|
||||
the terms of the Lesser GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
0MQ is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
Lesser GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the Lesser GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __ZMQ_PLATFORM_HPP_INCLUDED__
|
||||
#define __ZMQ_PLATFORM_HPP_INCLUDED__
|
||||
|
||||
// This is the platform definition for the Windows platform.
|
||||
// As a first step of the build process it is copied to
|
||||
// zmq directory to take place of platform.hpp generated from
|
||||
// platform.hpp.in on platforms supported by GNU autotools.
|
||||
|
||||
#define ZMQ_HAVE_WINDOWS
|
||||
#define _WINSOCKAPI_
|
||||
#define NOMINMAX
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
|
||||
// Turn on only the items zmq needs on the Windows platform.
|
||||
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#ifndef NOMCX // No Modem Configuration Extensions.
|
||||
#define NOMCX
|
||||
#endif
|
||||
#ifndef NOIME // No Input Method Editor.
|
||||
#define NOIME
|
||||
#endif
|
||||
#ifndef NOSOUND // No Sound driver routines.
|
||||
#define NOSOUND
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
#include <objbase.h>
|
||||
|
||||
// Enable winsock (not included when WIN32_LEAN_AND_MEAN is defined).
|
||||
#if(_WIN32_WINNT >= 0x0400)
|
||||
#include <winsock2.h>
|
||||
#include <mswsock.h>
|
||||
#else
|
||||
#include <winsock.h>
|
||||
#endif
|
||||
|
||||
#endif
|
@ -21,6 +21,8 @@
|
||||
|
||||
#include "../include/zmq.h"
|
||||
|
||||
#include "platform.hpp"
|
||||
|
||||
#if defined ZMQ_HAVE_WINDOWS
|
||||
#include "windows.hpp"
|
||||
#else
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "platform.hpp"
|
||||
#include "err.hpp"
|
||||
#include "fd.hpp"
|
||||
#include "ip.hpp"
|
||||
|
||||
#if defined ZMQ_HAVE_OPENVMS
|
||||
#include <netinet/tcp.h>
|
||||
|
@ -22,6 +22,8 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "stdint.hpp"
|
||||
|
||||
namespace zmq
|
||||
{
|
||||
|
||||
|
@ -17,9 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include <../include/zmq.h>
|
||||
#include "../include/zmq.h"
|
||||
|
||||
#include "pipe.hpp"
|
||||
|
||||
|
@ -26,8 +26,79 @@
|
||||
|
||||
#ifdef ZMQ_HAVE_WINDOWS
|
||||
|
||||
#include "windows.hpp"
|
||||
#error
|
||||
zmq::tcp_connecter_t::tcp_connecter_t () :
|
||||
s (retired_fd)
|
||||
{
|
||||
memset (&addr, 0, sizeof (addr));
|
||||
}
|
||||
|
||||
zmq::tcp_connecter_t::~tcp_connecter_t ()
|
||||
{
|
||||
if (s != retired_fd)
|
||||
close ();
|
||||
}
|
||||
|
||||
int zmq::tcp_connecter_t::set_address (const char *addr_)
|
||||
{
|
||||
// Convert the hostname into sockaddr_in structure.
|
||||
return resolve_ip_hostname (&addr, addr_);
|
||||
}
|
||||
|
||||
int zmq::tcp_connecter_t::open ()
|
||||
{
|
||||
zmq_assert (s == retired_fd);
|
||||
|
||||
// Create the socket.
|
||||
s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||||
// TODO: Convert error to errno.
|
||||
wsa_assert (s != INVALID_SOCKET);
|
||||
|
||||
// Set to non-blocking mode.
|
||||
unsigned long argp = 1;
|
||||
int rc = ioctlsocket (s, FIONBIO, &argp);
|
||||
wsa_assert (rc != SOCKET_ERROR);
|
||||
|
||||
// Disable Nagle's algorithm.
|
||||
int flag = 1;
|
||||
rc = setsockopt (s, IPPROTO_TCP, TCP_NODELAY, (char*) &flag,
|
||||
sizeof (int));
|
||||
wsa_assert (rc != SOCKET_ERROR);
|
||||
|
||||
// Connect to the remote peer.
|
||||
rc = ::connect (s, (sockaddr*) &addr, sizeof addr);
|
||||
|
||||
// Connect was successfull immediately.
|
||||
if (rc == 0)
|
||||
return 0;
|
||||
|
||||
// Asynchronous connect was launched.
|
||||
if (rc == SOCKET_ERROR && (WSAGetLastError () == WSAEINPROGRESS ||
|
||||
WSAGetLastError () == WSAEWOULDBLOCK)) {
|
||||
errno = EAGAIN;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// TODO: Convert error to errno.
|
||||
wsa_assert (rc == 0);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int zmq::tcp_connecter_t::close ()
|
||||
{
|
||||
zmq_assert (s != retired_fd);
|
||||
int rc = closesocket (s);
|
||||
wsa_assert (rc != SOCKET_ERROR);
|
||||
s = retired_fd;
|
||||
return 0;
|
||||
}
|
||||
|
||||
zmq::fd_t zmq::tcp_connecter_t::get_fd ()
|
||||
{
|
||||
return s;
|
||||
}
|
||||
|
||||
// connect
|
||||
|
||||
#else
|
||||
|
||||
|
@ -27,7 +27,6 @@
|
||||
|
||||
#ifdef ZMQ_HAVE_WINDOWS
|
||||
|
||||
#include "windows.hpp"
|
||||
#error
|
||||
|
||||
#else
|
||||
|
@ -23,8 +23,75 @@
|
||||
|
||||
#ifdef ZMQ_HAVE_WINDOWS
|
||||
|
||||
#include "windows.hpp"
|
||||
#error
|
||||
zmq::tcp_socket_t::tcp_socket_t () :
|
||||
s (retired_fd)
|
||||
{
|
||||
}
|
||||
|
||||
zmq::tcp_socket_t::~tcp_socket_t ()
|
||||
{
|
||||
if (s != retired_fd)
|
||||
close ();
|
||||
}
|
||||
|
||||
int zmq::tcp_socket_t::open (fd_t fd_)
|
||||
{
|
||||
zmq_assert (s == retired_fd);
|
||||
s = fd_;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int zmq::tcp_socket_t::close ()
|
||||
{
|
||||
zmq_assert (s != retired_fd);
|
||||
int rc = closesocket (s);
|
||||
wsa_assert (rc != SOCKET_ERROR);
|
||||
s = retired_fd;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int zmq::tcp_socket_t::write (const void *data, int size)
|
||||
{
|
||||
int nbytes = send (s, (char*) data, size, 0);
|
||||
|
||||
// If not a single byte can be written to the socket in non-blocking mode
|
||||
// we'll get an error (this may happen during the speculative write).
|
||||
if (nbytes == SOCKET_ERROR && WSAGetLastError () == WSAEWOULDBLOCK)
|
||||
return 0;
|
||||
|
||||
// Signalise peer failure.
|
||||
if (nbytes == SOCKET_ERROR && WSAGetLastError () == WSAECONNRESET)
|
||||
return -1;
|
||||
|
||||
wsa_assert (nbytes != SOCKET_ERROR);
|
||||
|
||||
return (size_t) nbytes;
|
||||
}
|
||||
|
||||
int zmq::tcp_socket_t::read (void *data, int size)
|
||||
{
|
||||
int nbytes = recv (s, (char*) data, size, 0);
|
||||
|
||||
// If not a single byte can be read from the socket in non-blocking mode
|
||||
// we'll get an error (this may happen during the speculative read).
|
||||
if (nbytes == SOCKET_ERROR && WSAGetLastError () == WSAEWOULDBLOCK)
|
||||
return 0;
|
||||
|
||||
// Connection failure.
|
||||
if (nbytes == -1 && (
|
||||
WSAGetLastError () == WSAECONNRESET ||
|
||||
WSAGetLastError () == WSAECONNREFUSED ||
|
||||
WSAGetLastError () == WSAENOTCONN))
|
||||
return -1;
|
||||
|
||||
wsa_assert (nbytes != SOCKET_ERROR);
|
||||
|
||||
// Orderly shutdown by the other peer.
|
||||
if (nbytes == 0)
|
||||
return -1;
|
||||
|
||||
return (size_t) nbytes;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
@ -113,4 +180,3 @@ int zmq::tcp_socket_t::read (void *data, int size)
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
13
src/uuid.cpp
13
src/uuid.cpp
@ -23,25 +23,28 @@
|
||||
|
||||
#if defined ZMQ_HAVE_WINDOWS
|
||||
|
||||
#include <rpcdce.h>
|
||||
|
||||
zmq::uuid_t::uuid_t ()
|
||||
{
|
||||
RPC_STATUS ret = UuidCreate (&uuid);
|
||||
zmq_assert (ret == RPC_S_OK);
|
||||
ret = UuidToString (&uuid, &uuid_str);
|
||||
zmq_assert (ret == RPC_S_OK);
|
||||
|
||||
/*
|
||||
HRESULT hr = CoCreateGUID (&uuid);
|
||||
zmq_assert (hr == S_OK);
|
||||
int rc = StringFromGUID2 (uuid, uuid_str, 40);
|
||||
zmq_assert (rc != 0);
|
||||
*/
|
||||
}
|
||||
|
||||
zmq::uuid_t::~uuid_t ()
|
||||
{
|
||||
RPC_STATUS ret = RpcStringFree(&uuid_str);
|
||||
assert (ret == RPC_S_OK);
|
||||
}
|
||||
|
||||
const char *zmq::uuid_t::to_string ()
|
||||
{
|
||||
return uuid_str;
|
||||
return (char*) uuid_str;
|
||||
}
|
||||
|
||||
#elif defined ZMQ_HAVE_FREEBSD
|
||||
|
@ -21,15 +21,12 @@
|
||||
#define __ZMQ_UUID_HPP_INCLUDED__
|
||||
|
||||
#include "platform.hpp"
|
||||
#include "stdint.hpp"
|
||||
|
||||
#if defined ZMQ_HAVE_WINDOWS
|
||||
#include <rpcdce.h>
|
||||
#elif defined ZMQ_HAVE_FREEBSD
|
||||
#if defined ZMQ_HAVE_FREEBSD
|
||||
#include <uuid.h>
|
||||
#elif defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_OSX
|
||||
#include <uuid/uuid.h>
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
namespace zmq
|
||||
@ -57,7 +54,7 @@ namespace zmq
|
||||
|
||||
#if defined ZMQ_HAVE_WINDOWS
|
||||
::UUID uuid;
|
||||
char *uuid_str;
|
||||
RPC_CSTR uuid_str;
|
||||
#elif defined ZMQ_HAVE_FREEBSD
|
||||
::uuid_t uuid;
|
||||
char *uuid_str;
|
||||
|
@ -106,7 +106,7 @@ void zmq::zmq_connecter_t::start_connecting ()
|
||||
}
|
||||
|
||||
// Connection establishment may be dealyed. Poll for its completion.
|
||||
else if (rc == -1 && errno == EINPROGRESS) {
|
||||
else if (rc == -1 && errno == EAGAIN) {
|
||||
handle = add_fd (tcp_connecter.get_fd ());
|
||||
handle_valid = true;
|
||||
set_pollout (handle);
|
||||
|
Loading…
Reference in New Issue
Block a user