18
lib/socket.c
18
lib/socket.c
@@ -188,6 +188,20 @@ static int iscsi_tcp_connect(struct iscsi_context *iscsi, union socket_address *
|
|||||||
|
|
||||||
int socksize;
|
int socksize;
|
||||||
|
|
||||||
|
switch (ai_family) {
|
||||||
|
case AF_INET:
|
||||||
|
socksize = sizeof(struct sockaddr_in);
|
||||||
|
break;
|
||||||
|
case AF_INET6:
|
||||||
|
socksize = sizeof(struct sockaddr_in6);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
iscsi_set_error(iscsi, "Unknown address family :%d. "
|
||||||
|
"Only IPv4/IPv6 supported so far.",
|
||||||
|
ai_family);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
iscsi->fd = socket(ai_family, SOCK_STREAM, 0);
|
iscsi->fd = socket(ai_family, SOCK_STREAM, 0);
|
||||||
if (iscsi->fd == -1) {
|
if (iscsi->fd == -1) {
|
||||||
iscsi_set_error(iscsi, "Failed to open iscsi socket. "
|
iscsi_set_error(iscsi, "Failed to open iscsi socket. "
|
||||||
@@ -246,8 +260,6 @@ static int iscsi_tcp_connect(struct iscsi_context *iscsi, union socket_address *
|
|||||||
ISCSI_LOG(iscsi,3,"TCP_NODELAY set to 1");
|
ISCSI_LOG(iscsi,3,"TCP_NODELAY set to 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
socksize = sizeof(struct sockaddr_in); // Work-around for now, need to fix it
|
|
||||||
|
|
||||||
if (connect(iscsi->fd, &sa->sa, socksize) != 0
|
if (connect(iscsi->fd, &sa->sa, socksize) != 0
|
||||||
&& errno != EINPROGRESS) {
|
&& errno != EINPROGRESS) {
|
||||||
iscsi_set_error(iscsi, "Connect failed with errno : "
|
iscsi_set_error(iscsi, "Connect failed with errno : "
|
||||||
@@ -332,6 +344,7 @@ iscsi_connect_async(struct iscsi_context *iscsi, const char *portal,
|
|||||||
case AF_INET:
|
case AF_INET:
|
||||||
socksize = sizeof(struct sockaddr_in);
|
socksize = sizeof(struct sockaddr_in);
|
||||||
memcpy(&sa.sin, ai->ai_addr, socksize);
|
memcpy(&sa.sin, ai->ai_addr, socksize);
|
||||||
|
sa.sin.sin_family = AF_INET;
|
||||||
sa.sin.sin_port = htons(port);
|
sa.sin.sin_port = htons(port);
|
||||||
#ifdef HAVE_SOCK_SIN_LEN
|
#ifdef HAVE_SOCK_SIN_LEN
|
||||||
sa.sin.sin_len = socksize;
|
sa.sin.sin_len = socksize;
|
||||||
@@ -341,6 +354,7 @@ iscsi_connect_async(struct iscsi_context *iscsi, const char *portal,
|
|||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
socksize = sizeof(struct sockaddr_in6);
|
socksize = sizeof(struct sockaddr_in6);
|
||||||
memcpy(&sa.sin6, ai->ai_addr, socksize);
|
memcpy(&sa.sin6, ai->ai_addr, socksize);
|
||||||
|
sa.sin6.sin6_family = AF_INET6;
|
||||||
sa.sin6.sin6_port = htons(port);
|
sa.sin6.sin6_port = htons(port);
|
||||||
#ifdef HAVE_SOCK_SIN_LEN
|
#ifdef HAVE_SOCK_SIN_LEN
|
||||||
sa.sin6.sin6_len = socksize;
|
sa.sin6.sin6_len = socksize;
|
||||||
|
|||||||
Reference in New Issue
Block a user