Fix FastAGI To Properly Check For A Connection
authorMichael L. Young <elgueromexicano@gmail.com>
Fri, 22 Feb 2013 19:40:02 +0000 (19:40 +0000)
committerMichael L. Young <elgueromexicano@gmail.com>
Fri, 22 Feb 2013 19:40:02 +0000 (19:40 +0000)
commite9bcf9826a71854b9a4df5b328d638d197dd0647
tree7303f70278bd568ba32defa304295f82e47811a0
parentabfb23df6be759f6ff80c2af7b3b7d7590cf3a32
Fix FastAGI To Properly Check For A Connection

When IPv6 support was added to FastAGI, the intent was to have the ability to
check all addresses resolved for a host since we might receive an IPv4 address
and an IPv6 address.  The problem with the current code, is that, since we are
doing O_NONBLOCK, we get EINPROGRESS when calling ast_connect() but are ignoring
this instead of handling it.  We break out of the loop and continue on.  When we
later call ast_poll(), it succeeds but we never check if we have a connection or
not on the socket level.  We then attempt to send data to the host address that
we think is setup and it fails.  We then check the errno and see that we have
"connection refused" and then return with agi failed.

This patch does the following:

* Handles EINPROGRESS by creating the function handle_connection()
  - ast_poll() was moved into this function
  - This function checks the results of the connection on the socket level after
    calling ast_poll()
* Continues to the next address if the above fails to create a connection
* Once all addresses resolved are tried and we still are unable to establish a
  connection, then we return that the FastAGI call failed

(closes issue ASTERISK-21065)
Reported by: Jeremy Kister
Tested by: Jeremy Kister, Michael L. Young
Patches:
  asterisk-21065_poll_correctly_v4.diff Michael L. Young (license 5026)

Review: https://reviewboard.asterisk.org/r/2330/
........

Merged revisions 381893 from http://svn.asterisk.org/svn/asterisk/branches/11

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