aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/drivers/mcast_user.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/um/drivers/mcast_user.c')
-rw-r--r--arch/um/drivers/mcast_user.c11
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