git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Debug pretrigger capture facility
[exim.git]
/
src
/
src
/
ip.c
diff --git
a/src/src/ip.c
b/src/src/ip.c
index c09962a38933667e6ff10e04131a1e799f53dd20..aa42343fbc7ea7365dc04ef90a2943459e13fa4d 100644
(file)
--- a/
src/src/ip.c
+++ b/
src/src/ip.c
@@
-3,7
+3,7
@@
*************************************************/
/* Copyright (c) University of Cambridge 1995 - 2018 */
*************************************************/
/* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 */
+/* Copyright (c) The Exim Maintainers 2020
- 2021
*/
/* See the file NOTICE for conditions of use and distribution. */
/* Functions for doing things with sockets. With the advent of IPv6 this has
/* See the file NOTICE for conditions of use and distribution. */
/* Functions for doing things with sockets. With the advent of IPv6 this has
@@
-463,8
+463,8
@@
for (host_item * h = &shost; h; h = h->next)
for (int port = portlo; port <= porthi; port++)
if (ip_connect(fd, af, h->address, port, timeout, fastopen_blob) == 0)
{
for (int port = portlo; port <= porthi; port++)
if (ip_connect(fd, af, h->address, port, timeout, fastopen_blob) == 0)
{
- if (fd != fd6) close(fd6);
- if (fd != fd4) close(fd4);
+ if (fd
6 >= 0 && fd
!= fd6) close(fd6);
+ if (fd
4 >= 0 && fd
!= fd4) close(fd4);
if (connhost)
{
h->port = port;
if (connhost)
{
h->port = port;
@@
-589,9
+589,7
@@
Returns: TRUE => ready for i/o
BOOL
fd_ready(int fd, time_t timelimit)
{
BOOL
fd_ready(int fd, time_t timelimit)
{
-fd_set select_inset;
-int time_left = timelimit - time(NULL);
-int rc;
+int rc, time_left = timelimit - time(NULL);
if (time_left <= 0)
{
if (time_left <= 0)
{
@@
-602,12
+600,8
@@
if (time_left <= 0)
do
{
do
{
- struct timeval tv = { .tv_sec = time_left, .tv_usec = 0 };
- FD_ZERO (&select_inset);
- FD_SET (fd, &select_inset);
-
/*DEBUG(D_transport) debug_printf("waiting for data on fd\n");*/
/*DEBUG(D_transport) debug_printf("waiting for data on fd\n");*/
- rc =
select(fd + 1, (SELECT_ARG2_TYPE *)&select_inset, NULL, NULL, &tv
);
+ rc =
poll_one_fd(fd, POLLIN, time_left * 1000
);
/* If some interrupt arrived, just retry. We presume this to be rare,
but it can happen (e.g. the SIGUSR1 signal sent by exiwhat causes
/* If some interrupt arrived, just retry. We presume this to be rare,
but it can happen (e.g. the SIGUSR1 signal sent by exiwhat causes
@@
-636,7
+630,7
@@
do
/* Checking the FD_ISSET is not enough, if we're interrupted, the
select_inset may still contain the 'input'. */
}
/* Checking the FD_ISSET is not enough, if we're interrupted, the
select_inset may still contain the 'input'. */
}
-while (rc < 0
|| !FD_ISSET(fd, &select_inset)
);
+while (rc < 0);
return TRUE;
}
return TRUE;
}