delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2011/05/16/09:29:28

X-Recipient: archive-cygwin AT delorie DOT com
X-Spam-Check-By: sourceware.org
Date: Mon, 16 May 2011 15:28:35 +0200
From: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: Socket: non-blocking connect and getsockopt SO_ERROR
Message-ID: <20110516132835.GG5248@calimero.vinschen.de>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
References: <1305549799 DOT 2447 DOT 40 DOT camel AT flander>
MIME-Version: 1.0
In-Reply-To: <1305549799.2447.40.camel@flander>
User-Agent: Mutt/1.5.21 (2010-09-15)
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

On May 16 14:43, Jacob Eiler wrote:
> Hi.
> 
> I am experiencing an issue with getsockopt when running an application
> under CygWin. 
> 
> The application (Kannel sms gateway) creates a new socket, attempt to
> connect non-blocking to the other host and later calls getsockopt to
> check for errors:
> 
> s = socket(PF_INET, SOCK_STREAM, 0);
> ...
> flags = fcntl(s, F_GETFL, 0);
> fcntl(s, F_SETFL, flags | O_NONBLOCK);
> ...
> connect(s, &addr, sizeof(addr))
> 
> connect returns EINPROGRESS and the application has a polling thread
> setup to handle timeout and check for changes. In both cases a callback
> function is invoked.
> 
> The callback function checks the connection by calling 
> 
> getsockopt(s, SOL_SOCKET, SO_ERROR, &err, &len)
> 
> but it returns 0 and no error - even if the connection was never
> established. Subsequently the application tries to write data to the
> socket - which fails with a "transport endpoint is not connected" error.
> 
> The code works just fine on Linux with getsockopt returning an error.
> Any pointer on how to get this working will be greatly appreciated.

Use select.  I'm not sure the underlying Winsock implementation sets
the SO_ERROR value in the same way as on Linux.


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019