-/*
+/*
Copyright (C) 2010 by Ronnie Sahlberg <ronniesahlberg@gmail.com>
This program is free software; you can redistribute it and/or modify
#include <netinet/in.h>
#include <poll.h>
#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/socket.h>
#include <arpa/inet.h>
#include "iscsi.h"
#include "iscsi-private.h"
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) {
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;
}
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)
{
if (iscsi->is_connected == 0) {
events |= POLLOUT;
- }
+ }
if (iscsi->outqueue) {
events |= POLLOUT;