+2189. [bug] Handle socket() returning EINTR. [RT #15949]
+
2186. [port] cygwin: libbind: check for struct sockaddr_storage
independently of IPv6. [RT #16482]
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: socket.c,v 1.207.2.44 2007/04/02 02:11:52 marka Exp $ */
+/* $Id: socket.c,v 1.207.2.45 2007/05/21 01:57:16 marka Exp $ */
#include <config.h>
#endif
char strbuf[ISC_STRERRORSIZE];
const char *err = "socket";
+ int try = 0;
REQUIRE(VALID_MANAGER(manager));
REQUIRE(socketp != NULL && *socketp == NULL);
return (ret);
sock->pf = pf;
+ again:
switch (type) {
case isc_sockettype_udp:
sock->fd = socket(pf, SOCK_DGRAM, IPPROTO_UDP);
sock->fd = socket(pf, SOCK_STREAM, IPPROTO_TCP);
break;
}
+ if (sock->fd == -1 && errno == EINTR && try++ < 42)
+ goto again;
#ifdef F_DUPFD
/*