X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fiscsi%2Fsocket.c;h=f79b31692b764dffb3e5136e1a1fb504a15c3c30;hp=6f1eeddac291c0881bfaddb1f9b6d613556fde16;hb=c4f43d26dc6bca9f41ac73e088ba016d0a4861d2;hpb=cb522f25cada0d3429c69d0fbaa5bd337a422cdd;ds=sidebyside diff --git a/ccan/iscsi/socket.c b/ccan/iscsi/socket.c index 6f1eedda..f79b3169 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) { @@ -43,8 +49,11 @@ int iscsi_connect_async(struct iscsi_context *iscsi, const char *target, iscsi_c 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) { @@ -75,22 +84,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 +115,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 +162,7 @@ int iscsi_which_events(struct iscsi_context *iscsi) if (iscsi->is_connected == 0) { events |= POLLOUT; - } + } if (iscsi->outqueue) { events |= POLLOUT;