When using a socket as a FILE *, the stdio functions will sometimes try to do
authorTilghman Lesher <tilghman@meg.abyt.es>
Wed, 4 Feb 2009 18:48:06 +0000 (18:48 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Wed, 4 Feb 2009 18:48:06 +0000 (18:48 +0000)
an fseek() on the stream, which is an invalid operation for a socket.  Turning
off buffering explicitly lets the stdio functions know they cannot do this,
thus avoiding a potential error.
(closes issue #14400)
 Reported by: fnordian
 Patches:
       tcptls.patch uploaded by fnordian (license 110)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@173458 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/tcptls.c

index 6aa0db8..973a94b 100644 (file)
@@ -135,8 +135,10 @@ static void *handle_tls_connection(void *data)
        /*
        * open a FILE * as appropriate.
        */
-       if (!tcptls_session->parent->tls_cfg)
+       if (!tcptls_session->parent->tls_cfg) {
                tcptls_session->f = fdopen(tcptls_session->fd, "w+");
+               setvbuf(tcptls_session->f, NULL, _IONBF, 0);
+       }
 #ifdef DO_SSL
        else if ( (tcptls_session->ssl = SSL_new(tcptls_session->parent->tls_cfg->ssl_ctx)) ) {
                SSL_set_fd(tcptls_session->ssl, tcptls_session->fd);