aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/sctp_m2ua.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/sctp_m2ua.c b/src/sctp_m2ua.c
index d0609dd..9ffcebc 100644
--- a/src/sctp_m2ua.c
+++ b/src/sctp_m2ua.c
@@ -632,7 +632,7 @@ static int sctp_trans_accept(struct bsc_fd *fd, unsigned int what)
struct sctp_m2ua_conn *conn;
struct sockaddr_in addr;
socklen_t len;
- int s;
+ int s, ret;
len = sizeof(addr);
s = accept(fd->fd, (struct sockaddr *) &addr, &len);
@@ -648,6 +648,15 @@ static int sctp_trans_accept(struct bsc_fd *fd, unsigned int what)
return -1;
}
+ memset(&events, 0, sizeof(events));
+ events.sctp_data_io_event = 1;
+ ret = setsockopt(s, SOL_SCTP, SCTP_EVENTS, &events, sizeof(events));
+ if (ret != 0) {
+ LOGP(DINP, LOGL_ERROR, "Failed to enable SCTP Events. Closing socket.\n");
+ close(s);
+ return -1;
+ }
+
LOGP(DINP, LOGL_NOTICE, "Got a new SCTP connection.\n");
conn = talloc_zero(fd->data, struct sctp_m2ua_conn);
if (!conn) {
@@ -672,10 +681,6 @@ static int sctp_trans_accept(struct bsc_fd *fd, unsigned int what)
return -1;
}
- memset(&events, 0, sizeof(events));
- events.sctp_data_io_event = 1;
- setsockopt(s, SOL_SCTP, SCTP_EVENTS, &events, sizeof(events));
-
llist_add_tail(&conn->entry, &trans->conns);
return 0;
}