diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2012-09-28 22:46:33 +0200 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2012-09-28 22:46:33 +0200 |
commit | a3c12fb6c5b1cdd4fb84e0ac18fc8820f79cf7fd (patch) | |
tree | 7c6eaea671f52f75a8e592cf171c3e0313a5bf77 /src/gprs_bssgp_pcu.cpp | |
parent | a9be1547b1b4459d64d92207da2a29e41fcb3ba2 (diff) |
Fix: Cleanly open and close NS instance
Diffstat (limited to 'src/gprs_bssgp_pcu.cpp')
-rw-r--r-- | src/gprs_bssgp_pcu.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.cpp index 4b0255e3..7ec4ee89 100644 --- a/src/gprs_bssgp_pcu.cpp +++ b/src/gprs_bssgp_pcu.cpp @@ -530,6 +530,7 @@ int gprs_bssgp_create(uint32_t sgsn_ip, uint16_t sgsn_port, uint16_t nsei, uint16_t rac, uint16_t cell_id) { struct sockaddr_in dest; + int rc; mcc = ((mcc & 0xf00) >> 8) * 100 + ((mcc & 0x0f0) >> 4) * 10 + (mcc & 0x00f); mnc = ((mnc & 0xf00) >> 8) * 100 + ((mnc & 0x0f0) >> 4) * 10 + (mnc & 0x00f); @@ -543,7 +544,13 @@ int gprs_bssgp_create(uint32_t sgsn_ip, uint16_t sgsn_port, uint16_t nsei, LOGP(DBSSGP, LOGL_ERROR, "Failed to create NS instance\n"); return -EINVAL; } - gprs_ns_nsip_listen(bssgp_nsi); + rc = gprs_ns_nsip_listen(bssgp_nsi); + if (rc < 0) { + LOGP(DBSSGP, LOGL_ERROR, "Failed to create socket\n"); + gprs_ns_destroy(bssgp_nsi); + bssgp_nsi = NULL; + return -EINVAL; + } dest.sin_family = AF_INET; dest.sin_port = htons(sgsn_port); |