connect: make the reconnect async

Signed-off-by: Peter Lieven <pl@kamp.de>
This commit is contained in:
Peter Lieven
2015-03-31 16:20:19 +02:00
parent 2c1b88e9e7
commit b152d26eb9
7 changed files with 158 additions and 98 deletions

View File

@@ -291,6 +291,14 @@ iscsi_connect_async(struct iscsi_context *iscsi, const char *portal,
}
if (iscsi->old_iscsi && iscsi->fd != iscsi->old_iscsi->fd) {
if (dup2(iscsi->fd, iscsi->old_iscsi->fd) == -1) {
return -1;
}
close(iscsi->fd);
iscsi->fd = iscsi->old_iscsi->fd;
}
iscsi->socket_status_cb = cb;
iscsi->connect_data = private_data;
@@ -383,6 +391,9 @@ iscsi_disconnect(struct iscsi_context *iscsi)
int
iscsi_get_fd(struct iscsi_context *iscsi)
{
if (iscsi->old_iscsi) {
return iscsi->old_iscsi->fd;
}
return iscsi->fd;
}
@@ -763,6 +774,9 @@ iscsi_service_reconnect_if_loggedin(struct iscsi_context *iscsi)
return 0;
}
}
if (iscsi->is_reconnecting) {
return 0;
}
return -1;
}
@@ -774,7 +788,11 @@ iscsi_service(struct iscsi_context *iscsi, int revents)
}
if (iscsi->pending_reconnect) {
iscsi_reconnect(iscsi);
if (time(NULL) > iscsi->next_reconnect) {
return iscsi_reconnect(iscsi);
} else {
return 0;
}
}
if (revents & POLLERR) {