From d997f1912250982b6b7e4eae7516245c9be291b7 Mon Sep 17 00:00:00 2001 From: Claudio Takahasi Date: Wed, 9 May 2007 22:38:56 +0000 Subject: serial: handle connection refused error and others SO_ERROR properly --- serial/manager.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/serial/manager.c b/serial/manager.c index 90637123..0c2baba9 100644 --- a/serial/manager.c +++ b/serial/manager.c @@ -401,14 +401,7 @@ static gboolean rfcomm_connect_cb(GIOChannel *chan, char node_name[16]; const char *pname = node_name; struct rfcomm_dev_req req; - int sk, ret, err, fd; - socklen_t len; - - if (cond & (G_IO_ERR | G_IO_HUP)) { - error("Hangup or error on rfcomm socket"); - err_connection_canceled(pc->conn, pc->msg); - goto fail; - } + int sk, err, fd; if (pc->canceled) { err_connection_canceled(pc->conn, pc->msg); @@ -417,17 +410,28 @@ static gboolean rfcomm_connect_cb(GIOChannel *chan, sk = g_io_channel_unix_get_fd(chan); - len = sizeof(ret); - if (getsockopt(sk, SOL_SOCKET, SO_ERROR, &ret, &len) < 0) { - err = errno; - error("getsockopt(SO_ERROR): %s (%d)", strerror(err), err); - err_connection_failed(pc->conn, pc->msg, strerror(err)); - goto fail; - } + if (cond & (G_IO_ERR | G_IO_HUP)) { + socklen_t len; + int ret; + + len = sizeof(ret); + if (getsockopt(sk, SOL_SOCKET, SO_ERROR, &ret, &len) < 0) { + err = errno; + error("getsockopt(SO_ERROR): %s (%d)", + strerror(err), err); + err_connection_failed(pc->conn, + pc->msg, strerror(err)); + goto fail; + } - if (ret != 0) { - error("connect(): %s (%d)", strerror(ret), ret); - err_connection_failed(pc->conn, pc->msg, strerror(ret)); + if (ret != 0) { + error("connect(): %s (%d)", strerror(ret), ret); + err_connection_failed(pc->conn, pc->msg, strerror(ret)); + goto fail; + } + + error("Hangup on rfcomm socket"); + err_connection_canceled(pc->conn, pc->msg); goto fail; } -- cgit