# HG changeset patch # User Mikael Berthe # Date 1125174003 -7200 # Node ID 82064124324d22cacd25fc451c6c361ac4c4ac6b # Parent 73433860665c8e8a704e32b7448d159a32aab656 Fix a SIGPIPE issue when connecting to the server This change fixes a SIGPIPE when cw_nb_connect() is called too fast after make_nb_netsocket(). In this case getsockopt() reports a wrong value (no error) and the first jab_send_raw() in jconn.c gets a SIGPIPE. The delay in jabglue.c can then be removed. diff -r 73433860665c -r 82064124324d mcabber/connwrap/connwrap.c --- a/mcabber/connwrap/connwrap.c Sat Aug 27 18:59:48 2005 +0200 +++ b/mcabber/connwrap/connwrap.c Sat Aug 27 22:20:03 2005 +0200 @@ -325,6 +325,17 @@ rc = connect(sockfd, serv_addr, addrlen); else{ /* check if the socket is connected correctly */ int optlen = sizeof(int), optval; + fd_set fds; + struct timeval tv; + + FD_ZERO(&fds); + FD_SET(sockfd, &fds); + + tv.tv_sec = 0; + tv.tv_usec = 10000; + + if (select(sockfd+1, 0, &fds, 0, &tv) < 1) + return -1; if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &optval, (socklen_t*)&optlen) || optval) return -1; *state = 0; diff -r 73433860665c -r 82064124324d mcabber/src/jabglue.c --- a/mcabber/src/jabglue.c Sat Aug 27 18:59:48 2005 +0200 +++ b/mcabber/src/jabglue.c Sat Aug 27 22:20:03 2005 +0200 @@ -196,7 +196,6 @@ } if (jc && jc->state == JCONN_STATE_CONNECTING) { - usleep(150000); jab_start(jc); return; }