3939#include < fcntl.h>
4040#include < errno.h>
4141
42+ int mockSockSetup (int sock)
43+ {
44+ if (fcntl (sock, F_SETFL, O_NONBLOCK) == -1 )
45+ {
46+ fprintf (stderr, MOCK " socket fcntl(O_NONBLOCK): %s\n " , strerror (errno));
47+ close (sock);
48+ return -1 ;
49+ }
50+
51+ #ifndef MSG_NOSIGNAL
52+ int i = 1 ;
53+ if (setsockopt (sock, SOL_SOCKET, SO_NOSIGPIPE, &i, sizeof i) == -1 )
54+ {
55+ fprintf (stderr, MOCK " sockopt( SO_NOSIGPIPE)(macOS): %s\n " , strerror (errno));
56+ return -1 ;
57+ }
58+ #endif
59+
60+ return sock;
61+ }
62+
4263int mockConnect (uint32_t ipv4, int & sock, int port)
4364{
4465 struct sockaddr_in server;
@@ -56,14 +77,7 @@ int mockConnect (uint32_t ipv4, int& sock, int port)
5677 return 0 ;
5778 }
5879
59- if (fcntl (sock, F_SETFL, O_NONBLOCK) == -1 )
60- {
61- fprintf (stderr, MOCK " ClientContext::connect: fcntl(O_NONBLOCK): %s\n " , strerror (errno));
62- close (sock);
63- return 0 ;
64- }
65-
66- return 1 ;
80+ return mockSockSetup (sock) == -1 ? 0 : 1 ;
6781}
6882
6983ssize_t mockFillInBuf (int sock, char * ccinbuf, size_t & ccinbufsize)
@@ -142,8 +156,11 @@ ssize_t mockWrite (int sock, const uint8_t* data, size_t size, int timeout_ms)
142156 }
143157 if (ret)
144158 {
145- // ret = ::write(sock, data, size);
159+ #ifndef MSG_NOSIGNAL
160+ ret = ::write (sock, data, size);
161+ #else
146162 ret = ::send (sock, data, size, MSG_NOSIGNAL);
163+ #endif
147164 if (ret == -1 )
148165 {
149166 fprintf (stderr, MOCK " ClientContext::read: write(%d): %s\n " , sock, strerror (errno));
0 commit comments