X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fiscsi%2Fsocket.c;h=430be7211599c6ef65756c71d1b55c70e01585da;hp=6f1eeddac291c0881bfaddb1f9b6d613556fde16;hb=291237b4fed863be74051274ac5ad9920cb33cc3;hpb=cb522f25cada0d3429c69d0fbaa5bd337a422cdd;ds=sidebyside diff --git a/ccan/iscsi/socket.c b/ccan/iscsi/socket.c index 6f1eedda..430be721 100644 --- a/ccan/iscsi/socket.c +++ b/ccan/iscsi/socket.c @@ -1,4 +1,4 @@ -/* +/* Copyright (C) 2010 by Ronnie Sahlberg This program is free software; you can redistribute it and/or modify @@ -15,6 +15,7 @@ along with this program; if not, see . */ +#include "config.h" #include #include #include @@ -25,10 +26,15 @@ #include #include #include +#include +#include #include #include "iscsi.h" #include "iscsi-private.h" #include "dlinklist.h" +#if HAVE_SYS_FILIO_H +#include +#endif static void set_nonblocking(int fd) { @@ -39,12 +45,14 @@ static void set_nonblocking(int fd) int iscsi_connect_async(struct iscsi_context *iscsi, const char *target, iscsi_command_cb cb, void *private_data) { - int tpgt = -1; int port = 3260; char *str; char *addr; - struct sockaddr_storage s; - struct sockaddr_in *sin = (struct sockaddr_in *)&s; + union { + struct sockaddr sa; + struct sockaddr_storage ss; + struct sockaddr_in sin; + } s; int socksize; if (iscsi == NULL) { @@ -64,7 +72,6 @@ int iscsi_connect_async(struct iscsi_context *iscsi, const char *target, iscsi_c /* check if we have a target portal group tag */ if ((str = rindex(addr, ',')) != NULL) { - tpgt = atoi(str+1); str[0] = 0; } @@ -75,22 +82,22 @@ int iscsi_connect_async(struct iscsi_context *iscsi, const char *target, iscsi_c str[0] = 0; } - sin->sin_family = AF_INET; - sin->sin_port = htons(port); - if (inet_pton(AF_INET, addr, &sin->sin_addr) != 1) { + s.sin.sin_family = AF_INET; + s.sin.sin_port = htons(port); + if (inet_pton(AF_INET, addr, &s.sin.sin_addr) != 1) { printf("failed to convert to ip address\n"); free(addr); return -4; } free(addr); - switch (s.ss_family) { + switch (s.ss.ss_family) { case AF_INET: iscsi->fd = socket(AF_INET, SOCK_STREAM, 0); socksize = sizeof(struct sockaddr_in); break; default: - printf("Unknown family :%d\n", s.ss_family); + printf("Unknown family :%d\n", s.ss.ss_family); return -5; } @@ -106,13 +113,13 @@ int iscsi_connect_async(struct iscsi_context *iscsi, const char *target, iscsi_c set_nonblocking(iscsi->fd); - if (connect(iscsi->fd, (struct sockaddr *)&s, socksize) != 0 && errno != EINPROGRESS) { + if (connect(iscsi->fd, &s.sa, socksize) != 0 && errno != EINPROGRESS) { printf("Connect failed errno : %s (%d)\n", strerror(errno), errno); return -7; - } + } return 0; -} +} int iscsi_disconnect(struct iscsi_context *iscsi) { @@ -153,7 +160,7 @@ int iscsi_which_events(struct iscsi_context *iscsi) if (iscsi->is_connected == 0) { events |= POLLOUT; - } + } if (iscsi->outqueue) { events |= POLLOUT;