33 #include "platform.hpp" 35 #if defined ZMQ_HAVE_WINDOWS 39 #include <sys/types.h> 40 #include <sys/socket.h> 42 #include <netinet/in.h> 43 #include <netinet/tcp.h> 46 #if defined ZMQ_HAVE_OPENVMS 54 #if defined ZMQ_HAVE_SOCK_CLOEXEC 55 type_ |= SOCK_CLOEXEC;
58 fd_t s = socket (domain_, type_, protocol_);
59 #ifdef ZMQ_HAVE_WINDOWS 60 if (s == INVALID_SOCKET)
61 return INVALID_SOCKET;
70 #if !defined ZMQ_HAVE_SOCK_CLOEXEC && defined FD_CLOEXEC 71 int rc = fcntl (s, F_SETFD, FD_CLOEXEC);
76 #if defined ZMQ_HAVE_WINDOWS && defined HANDLE_FLAG_INHERIT 77 BOOL brc = SetHandleInformation ((HANDLE) s, HANDLE_FLAG_INHERIT, 0);
86 #if defined ZMQ_HAVE_WINDOWS 88 int rc = ioctlsocket (s_, FIONBIO, &nonblock);
89 wsa_assert (rc != SOCKET_ERROR);
90 #elif defined ZMQ_HAVE_OPENVMS 92 int rc = ioctl (s_, FIONBIO, &nonblock);
95 int flags = fcntl (s_, F_GETFL, 0);
98 int rc = fcntl (s_, F_SETFL, flags | O_NONBLOCK);
108 #ifdef ZMQ_HAVE_WINDOWS 113 int rc = setsockopt (s_, IPPROTO_IPV6, IPV6_V6ONLY, (
const char*) &flag,
115 #ifdef ZMQ_HAVE_WINDOWS 116 wsa_assert (rc != SOCKET_ERROR);
126 struct sockaddr_storage ss;
128 #if defined ZMQ_HAVE_HPUX || defined ZMQ_HAVE_WINDOWS 129 int addrlen = static_cast <
int> (
sizeof ss);
131 socklen_t addrlen =
sizeof ss;
133 rc = getpeername (sockfd_, (
struct sockaddr*) &ss, &addrlen);
134 #ifdef ZMQ_HAVE_WINDOWS 135 if (rc == SOCKET_ERROR) {
136 const int last_error = WSAGetLastError();
137 wsa_assert (last_error != WSANOTINITIALISED &&
138 last_error != WSAEFAULT &&
139 last_error != WSAEINPROGRESS &&
140 last_error != WSAENOTSOCK);
152 char host [NI_MAXHOST];
153 rc = getnameinfo ((
struct sockaddr*) &ss, addrlen, host,
sizeof host,
154 NULL, 0, NI_NUMERICHOST);
162 struct sockaddr_storage sa_stor;
166 return (
int) u.sa.sa_family;
171 int rc = setsockopt(s_, IPPROTO_IP, IP_TOS, reinterpret_cast<const char*>(&iptos),
sizeof(iptos));
173 #ifdef ZMQ_HAVE_WINDOWS 174 wsa_assert (rc != SOCKET_ERROR);
fd_t open_socket(int domain_, int type_, int protocol_)
void unblock_socket(fd_t s_)
int get_peer_ip_address(fd_t sockfd_, std::string &ip_addr_)
void enable_ipv4_mapping(fd_t s_)
void set_ip_type_of_service(fd_t s_, int iptos)