connect: make the reconnect async
Signed-off-by: Peter Lieven <pl@kamp.de>
This commit is contained in:
20
lib/socket.c
20
lib/socket.c
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user