getsockopt(SO_KEEPALIVE) returns incorrect option length
Pavel Holejsovsky
pavel.holejsovsky@upek.com
Fri Jul 2 10:01:00 GMT 2010
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
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: cygcheck.out
URL: <http://cygwin.com/pipermail/cygwin/attachments/20100702/6e37620b/attachment.ksh>
-------------- next part --------------
--
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
More information about the Cygwin
mailing list