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]

getsockopt(SO_KEEPALIVE) returns incorrect option length


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

Attachment: cygcheck.out
Description: Text document

--
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]