Hi, Consider the following code:
$ cat cork.c #include <arpa/inet.h> #include <netinet/in.h> #include <netinet/tcp.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #if defined(TCP_NOPUSH) && !defined(TCP_CORK) # define TCP_CORK TCP_NOPUSH #endif int main(int argc, const char* argv[]) { union { struct sockaddr_in in; struct sockaddr sa; } addr; int sock, cork = 1; memset(&addr, 0, sizeof(addr)); if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) perror("socket"); addr.in.sin_family = AF_INET; addr.in.sin_addr.s_addr = inet_addr(argv[1]); addr.in.sin_port = htons((unsigned short) atoi(argv[2])); if (connect(sock, &addr.sa, sizeof(addr.in)) < 0) perror("connect"); if (setsockopt(sock, IPPROTO_TCP, TCP_CORK, (char*) &cork, sizeof(cork)) != 0) perror("cork"); return 0; } When compiled and run under Cygwin, the last syscall, setsockopt(), returns an error, Protocol not available: gcc cork.c ./a.exe 8.8.8.8 443 cork: Protocol not available The same code works under Linux just fine. I straced both. gcc cork.c ./a.out 8.8.8.8 443 Any ideas? Is TCP_NOPUSH (which is a BSDism, BTW) not actually usable on Cygwin? If not, why is it in the header file <netinet/tcp.h>? TIA! -- 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