summaryrefslogtreecommitdiff
path: root/pjlib/src/pj/ioqueue_common_abs.c
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-07-18 00:10:53 +0000
committerBenny Prijono <bennylp@teluu.com>2006-07-18 00:10:53 +0000
commitcbb6c140cf6e47e65b31b93009cfe39916933009 (patch)
treec2ba2535b30e6ea3305f3089460ca0ad3bbaf6e7 /pjlib/src/pj/ioqueue_common_abs.c
parent9c4046342c5cfb8e870d82072d52fec51eb040d5 (diff)
Fixed several bugs related to TCP:
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@610 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/src/pj/ioqueue_common_abs.c')
-rw-r--r--pjlib/src/pj/ioqueue_common_abs.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/pjlib/src/pj/ioqueue_common_abs.c b/pjlib/src/pj/ioqueue_common_abs.c
index 982c8080..5356f91d 100644
--- a/pjlib/src/pj/ioqueue_common_abs.c
+++ b/pjlib/src/pj/ioqueue_common_abs.c
@@ -209,8 +209,8 @@ void ioqueue_dispatch_write_event(pj_ioqueue_t *ioqueue, pj_ioqueue_key_t *h)
{
int value;
socklen_t vallen = sizeof(value);
- int gs_rc = getsockopt(h->fd, SOL_SOCKET, SO_ERROR,
- &value, &vallen);
+ int gs_rc = pj_sock_getsockopt(h->fd, SOL_SOCKET, SO_ERROR,
+ &value, &vallen);
if (gs_rc != 0) {
/* Argh!! What to do now???
* Just indicate that the socket is connected. The
@@ -524,8 +524,20 @@ void ioqueue_dispatch_exception_event( pj_ioqueue_t *ioqueue,
pj_mutex_unlock(h->mutex);
/* Call callback. */
- if (h->cb.on_connect_complete && !IS_CLOSING(h))
- (*h->cb.on_connect_complete)(h, -1);
+ if (h->cb.on_connect_complete && !IS_CLOSING(h)) {
+ pj_status_t status = -1;
+#if (defined(PJ_HAS_SO_ERROR) && PJ_HAS_SO_ERROR!=0)
+ int value;
+ socklen_t vallen = sizeof(value);
+ int gs_rc = pj_sock_getsockopt(h->fd, SOL_SOCKET, SO_ERROR,
+ &value, &vallen);
+ if (gs_rc == 0) {
+ status = PJ_RETURN_OS_ERROR(value);
+ }
+#endif
+
+ (*h->cb.on_connect_complete)(h, status);
+ }
}
/*