diff options
Diffstat (limited to 'arch/um/drivers/mcast_user.c')
-rw-r--r-- | arch/um/drivers/mcast_user.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/um/drivers/mcast_user.c b/arch/um/drivers/mcast_user.c index 3fd69067a5f5..5db136e2651c 100644 --- a/arch/um/drivers/mcast_user.c +++ b/arch/um/drivers/mcast_user.c | |||
@@ -54,7 +54,7 @@ static int mcast_open(void *data) | |||
54 | struct mcast_data *pri = data; | 54 | struct mcast_data *pri = data; |
55 | struct sockaddr_in *sin = pri->mcast_addr; | 55 | struct sockaddr_in *sin = pri->mcast_addr; |
56 | struct ip_mreq mreq; | 56 | struct ip_mreq mreq; |
57 | int fd = -EINVAL, yes = 1, err = -EINVAL;; | 57 | int fd, yes = 1, err = 0; |
58 | 58 | ||
59 | 59 | ||
60 | if ((sin->sin_addr.s_addr == 0) || (sin->sin_port == 0)) | 60 | if ((sin->sin_addr.s_addr == 0) || (sin->sin_port == 0)) |
@@ -65,13 +65,14 @@ static int mcast_open(void *data) | |||
65 | if (fd < 0){ | 65 | if (fd < 0){ |
66 | printk("mcast_open : data socket failed, errno = %d\n", | 66 | printk("mcast_open : data socket failed, errno = %d\n", |
67 | errno); | 67 | errno); |
68 | fd = -errno; | 68 | err = -errno; |
69 | goto out; | 69 | goto out; |
70 | } | 70 | } |
71 | 71 | ||
72 | if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) { | 72 | if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) { |
73 | printk("mcast_open: SO_REUSEADDR failed, errno = %d\n", | 73 | printk("mcast_open: SO_REUSEADDR failed, errno = %d\n", |
74 | errno); | 74 | errno); |
75 | err = -errno; | ||
75 | goto out_close; | 76 | goto out_close; |
76 | } | 77 | } |
77 | 78 | ||
@@ -80,6 +81,7 @@ static int mcast_open(void *data) | |||
80 | sizeof(pri->ttl)) < 0) { | 81 | sizeof(pri->ttl)) < 0) { |
81 | printk("mcast_open: IP_MULTICAST_TTL failed, error = %d\n", | 82 | printk("mcast_open: IP_MULTICAST_TTL failed, error = %d\n", |
82 | errno); | 83 | errno); |
84 | err = -errno; | ||
83 | goto out_close; | 85 | goto out_close; |
84 | } | 86 | } |
85 | 87 | ||
@@ -87,12 +89,14 @@ static int mcast_open(void *data) | |||
87 | if (setsockopt(fd, SOL_IP, IP_MULTICAST_LOOP, &yes, sizeof(yes)) < 0) { | 89 | if (setsockopt(fd, SOL_IP, IP_MULTICAST_LOOP, &yes, sizeof(yes)) < 0) { |
88 | printk("mcast_open: IP_MULTICAST_LOOP failed, error = %d\n", | 90 | printk("mcast_open: IP_MULTICAST_LOOP failed, error = %d\n", |
89 | errno); | 91 | errno); |
92 | err = -errno; | ||
90 | goto out_close; | 93 | goto out_close; |
91 | } | 94 | } |
92 | 95 | ||
93 | /* bind socket to mcast address */ | 96 | /* bind socket to mcast address */ |
94 | if (bind(fd, (struct sockaddr *) sin, sizeof(*sin)) < 0) { | 97 | if (bind(fd, (struct sockaddr *) sin, sizeof(*sin)) < 0) { |
95 | printk("mcast_open : data bind failed, errno = %d\n", errno); | 98 | printk("mcast_open : data bind failed, errno = %d\n", errno); |
99 | err = -errno; | ||
96 | goto out_close; | 100 | goto out_close; |
97 | } | 101 | } |
98 | 102 | ||
@@ -107,14 +111,15 @@ static int mcast_open(void *data) | |||
107 | "interface on the host.\n"); | 111 | "interface on the host.\n"); |
108 | printk("eth0 should be configured in order to use the " | 112 | printk("eth0 should be configured in order to use the " |
109 | "multicast transport.\n"); | 113 | "multicast transport.\n"); |
114 | err = -errno; | ||
110 | goto out_close; | 115 | goto out_close; |
111 | } | 116 | } |
112 | 117 | ||
113 | out: | ||
114 | return fd; | 118 | return fd; |
115 | 119 | ||
116 | out_close: | 120 | out_close: |
117 | os_close_file(fd); | 121 | os_close_file(fd); |
122 | out: | ||
118 | return err; | 123 | return err; |
119 | } | 124 | } |
120 | 125 | ||