37 #include "platform.hpp" 47 #ifdef ZMQ_HAVE_WINDOWS 51 #include <sys/types.h> 52 #include <sys/socket.h> 58 own_t (io_thread_, options_),
61 proxy_addr (proxy_addr_),
66 delayed_start (delayed_start_),
69 current_reconnect_ivl (options.reconnect_ivl)
120 if (rc == 0 || rc == -1)
129 std::string hostname =
"";
146 if (rc == 0 || rc == -1)
198 if (rc == -1 || rc == 0)
210 if (rc == -1 || rc == 0)
252 return response.
method == 0? 0: -1;
323 #ifdef ZMQ_HAVE_WINDOWS 324 if (
s == INVALID_SOCKET)
333 if (tcp_addr->
family () == AF_INET6)
363 rc = ::connect (
s, tcp_addr->
addr (), tcp_addr->
addrlen ());
371 #ifdef ZMQ_HAVE_WINDOWS 372 const int last_error = WSAGetLastError();
373 if (last_error == WSAEINPROGRESS || last_error == WSAEWOULDBLOCK)
376 errno = wsa_error_to_errno (last_error);
391 int len =
sizeof err;
393 socklen_t len =
sizeof err;
396 const int rc = getsockopt (
s, SOL_SOCKET, SO_ERROR, (
char*) &err, &len);
400 #ifdef ZMQ_HAVE_WINDOWS 403 wsa_assert (err == WSAECONNREFUSED
404 || err == WSAETIMEDOUT
405 || err == WSAECONNABORTED
406 || err == WSAEHOSTUNREACH
407 || err == WSAENETUNREACH
408 || err == WSAENETDOWN
411 || err == WSAEADDRINUSE);
443 #ifdef ZMQ_HAVE_WINDOWS 444 const int rc = closesocket (
s);
445 wsa_assert (rc != SOCKET_ERROR);
455 const std::string &address_, std::string &hostname_, uint16_t &port_)
458 const size_t idx = address_.rfind (
':');
459 if (idx == std::string::npos) {
465 if (idx < 2 || address_ [0] !=
'[' || address_ [idx - 1] !=
']')
466 hostname_ = address_.substr (0, idx);
468 hostname_ = address_.substr (1, idx - 2);
471 const std::string port_str = address_.substr (idx + 1);
473 port_ = (uint16_t) atoi (port_str.c_str ());
void encode(const socks_request_t &req)
#define LIBZMQ_DELETE(p_object)
zmq::socket_base_t * socket
bool message_ready() const
void send_attach(zmq::session_base_t *destination_, zmq::i_engine *engine_, bool inc_seqnum_=true)
void tune_tcp_keepalives(fd_t s_, int keepalive_, int keepalive_cnt_, int keepalive_idle_, int keepalive_intvl_)
socks_choice_decoder_t choice_decoder
void process_term(int linger_)
void set_pollout(handle_t handle_)
socks_greeting_encoder_t greeting_encoder
fd_t open_socket(int domain_, int type_, int protocol_)
const std::string address
void unblock_socket(fd_t s_)
int get_new_reconnect_ivl()
void cancel_timer(int id_)
bool has_src_addr() const
socklen_t src_addrlen() const
int parse_address(const std::string &address_, std::string &hostname_, uint16_t &port_)
bool has_pending_data() const
ZMQ_EXPORT int zmq_errno(void)
void event_connected(const std::string &addr_, int fd_)
int process_server_response(const socks_choice_t &response)
int current_reconnect_ivl
zmq::fd_t check_proxy_connection()
zmq::session_base_t * session
int resolve(const char *name_, bool local_, bool ipv6_, bool is_src_=false)
void set_pollin(handle_t handle_)
void event_connect_delayed(const std::string &addr_, int err_)
socket_base_t * get_socket()
void set_tcp_receive_buffer(fd_t sockfd_, int bufsize_)
socks_response_decoder_t response_decoder
void tune_tcp_socket(fd_t s_)
void enable_ipv4_mapping(fd_t s_)
uint32_t generate_random()
const std::string protocol
void set_tcp_send_buffer(fd_t sockfd_, int bufsize_)
bool message_ready() const
socks_connecter_t(zmq::io_thread_t *io_thread_, zmq::session_base_t *session_, const options_t &options_, address_t *addr_, address_t *proxy_addr_, bool delayed_start_)
void encode(const socks_greeting_t &greeting_)
void reset_pollout(handle_t handle_)
void add_timer(int timout_, int id_)
socks_request_encoder_t request_encoder
void event_closed(const std::string &addr_, int fd_)
const sockaddr * addr() const
void event_connect_retried(const std::string &addr_, int interval_)
void reset_pollin(handle_t handle_)
socklen_t addrlen() const
sa_family_t family() const
bool has_pending_data() const
virtual void process_plug()
handle_t add_fd(fd_t fd_)
union zmq::address_t::@0 resolved
int to_string(std::string &addr_) const
const sockaddr * src_addr() const
void rm_fd(handle_t handle_)
socks_response_t decode()
virtual void timer_event(int id_)
void set_ip_type_of_service(fd_t s_, int iptos)
virtual void process_term(int linger_)