This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: R: getsockopt(SO_KEEPALIVE) returns incorrect option length


On Jul  2 13:31, Pavel Holejsovsky wrote:
> On 7/2/2010 12:01 PM, Marco Atzeri wrote:
> >--- Ven 2/7/10, Pavel Holejsovsky ha scritto:
> >
> >>Hi,
> >>
> >>I think that following problem shows problematic behavior
> >>in cygwin 1.7.5, at least incompatible with linux:
> >>
> >>#include<stdio.h>
> >>#include<sys/socket.h>
> >>
> >>int main() {
> >>         int sock, option, optlen =
> >>sizeof(int);
> >>         sock = socket(AF_INET,
> >>SOCK_STREAM, 0);
> >>         getsockopt(sock, SOL_SOCKET,
> >>SO_KEEPALIVE,&option,&optlen);
> >>         printf("option=%d,
> >>optlen=%d\n", option, optlen);
> >>         return 0;
> >>}
> >>
> >>Prints optlen=1, while it is expected to be sizeof(int),
> >>i.e. 4.
> >>
> >>This is most probably because uinderlying winsock call has
> >>this (mis)behavior, but I think that in cygwin layer this
> >>could be worked around to be more unix compatible.
> >>
> >>This issue is relevant:
> >>
> >>SO_KEEPALIVE value is actually a char on Windows, not BOOL
> >>https://bugzilla.gnome.org/show_bug.cgi?id=611756
> >>
> >>And causes glib gio 2.24 to fail certain socket operations
> >>on cygwin.
> >>
> >>thanks,
> >>Pavel
> >
> >option=0, optlen=4
> >
> >on XP-sp2, cygwin 1.7.5s(0.227/5/3) 20100628
> >
> 
> Thanks for testing, Marco.
> 
> So it is even system-dependent misbehaviour of winsock.  On w7-x64
> cygwin 1.7.5 it prints
> option=2674688, optlen=1

Looks like a Windows regression.  I can reproduce optlen=1 on Vista
and W7, while I also get optlen=4 on XP.

I tested this a bit further and checked the other BSD-compatible
SOL_SOCKET options which use int as return type in BSD and BOOL in
Winsock.  It turns out that starting with Vista the SO_DONTROUTE option
is also wrongly returning just a one byte value with optlen set to 1.
I assume somebody changed something accidentally from BOOL to BOOLEAN in
the Winsock sources.

I'll added a workaround to Cygwin.


Thanks for the report,
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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]