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; }