Mail Archives: cygwin/1998/06/18/01:15:33
To fix the most serious problems:
Please, _READ_ the IMPORTANT UPGRADE NOTICE at the end of this note.
Please, ensure that there is only _ONE_ cygwinb19.dll.
Please, ensure that _ALL_ b18 binaries have been removed.
Please, _USE_ the Searchable Mail Archives.
---David Gadbois <gadbois AT cyc DOT com> wrote:
>
> I recently installed a vanilla b19.1 and am re-porting a bunch of code
> from b18.
>
> I have some library code that takes sockets that turns sockets into
> FILE *'s so that calling code doesn't need to worry if it is dealing
> with a socket or a regular file. fdopen() is failing on sockets with
> EBADF. Is there a workaround?
>
> Test case appended. Oh, and as a bonus question, I normally rig
> things so that detected program errors print a message and send a
> SIGINT to the process. (See the function die() below.) When running
> under gdb, this normally returns control to gdb with all the stack
> ready for examination. The B19 behavior is for the program to exit.
>
> --David Gadbois
>
> #include <sys/types.h>
> #include <sys/socket.h>
> #include <netinet/in.h>
> #include <netdb.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <stdio.h>
> #include <stdarg.h>
> #include <errno.h>
> #include <stdlib.h>
> #include <signal.h>
> #include <unistd.h>
> #include <string.h>
>
> #define PROGRAM "socket-fdopen"
>
> void die(char *format, ...) {
> va_list args;
>
> fprintf(stderr, "%s: ", PROGRAM);
> va_start(args, format);
> vfprintf(stderr, format, args);
> va_end(args);
> if (errno)
> fprintf(stderr, ": %s", strerror(errno));
> fprintf(stderr, ".\n");
> kill(getpid(), SIGINT);
> }
>
> #define MESSAGE "Eat flaming death, monkey boy!\r\n"
>
> int main(int argc, char **argv) {
> int port;
> struct sockaddr_in addr;
> int sfd;
>
> if (argc == 1)
> die("Must specify a port number to listen to.");
> port = atoi(argv[1]);
> if (port < 1024 || port > 65536)
> die("Invalid port %d", port);
>
> /* Make sure Winsock gets initialized. */
> getprotobyname("tcp");
>
> if ((sfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
> die("socket");
>
> {
> int reuseaddr = 1;
>
> if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR,
> (char *) &reuseaddr, sizeof(reuseaddr)) != 0)
> die("setsockopt");
> }
>
> (void) memset((void *) &addr, 0, sizeof(addr));
> addr.sin_family = AF_INET;
> addr.sin_port = htons((u_short) port);
> addr.sin_addr.s_addr = htonl(INADDR_ANY);
>
> if (bind(sfd, (struct sockaddr *) &addr, sizeof(addr)) < 0)
> die("bind");
>
> if (listen(sfd, 5) < 0)
> die("listen");
>
> while (1) {
> int new_sfd;
> struct sockaddr_in peer_addr;
> int peer_addr_len = sizeof(peer_addr);
>
> if ((new_sfd = accept(sfd, (struct sockaddr *) &peer_addr,
&peer_addr_len)) < 0)
> die("accept");
> #if 1
> {
> FILE *fp;
>
> if ((fp = fdopen(new_sfd, "w")) == NULL)
> die("fdopen");
> if (fwrite(MESSAGE, sizeof(char), strlen(MESSAGE), fp) !=
strlen(MESSAGE))
> die("fwrite");
> if (fclose(fp) != 0)
> die("fclose");
> }
> #else
> if (write(new_sfd, MESSAGE, strlen(MESSAGE)) != strlen(MESSAGE))
> die("write");
> if (close(new_sfd) != 0)
> die("close");
> #endif
> }
> }
> -
> For help on using this list (especially unsubscribing), send a
message to
> "gnu-win32-request AT cygnus DOT com" with one line of text: "help".
>
- \\||//
---o0O0--Earnie--0O0o----
--earnie_boyd AT yahoo DOT com--
------ooo0O--O0ooo-------
Please, research your question via the Searchable Mail Archives first.
http://www.cygnus.com/ml/gnu-win32 (Searchable Mail Archives)
Check out these great gnu-win32 related sites:
ftp://ftp.cygnus.com/pub/gnu-win32/latest/ (ftp site)
http://www.cygnus.com/pubs/gnupro/ (Comercial Page)
http://www.cygnus.com/misc/gnu-win32/ (Project Page)
http://dvpraktikum.informatik.uni-koeln.de:3232/
(Cygwin32 Porting Project)
http://www.lexa.ru/sos (Sergey Okhapkin)
ftp://www.lexa.ru/pub/domestic/sos/ (Sergey's ftp site)
http://www.fu.is.saga-u.ac.jp/~colin/gcc.html (Colin Peters - Mingw32)
http://www.xraylith.wisc.edu/~khan/software/gnu-win32/ (Mumit Khan)
ftp://ftp.hksys.com/pub/mirrors/EGCS-Win32/ (Jeremy Bettis - mirror)
http://gnu-win32.paranoia.ru (Chuck Bogorad's ports)
http://www.downloadwizard.com/ak/gnu-win32/bash.html
(GNU-Win32 Bash Configuration)
http://www.parallax.co.uk/~andyp/index_text.html (Andy Piper - ports)
http://www.tiac.net/users/cgf (Christopher Faylor - package ports)
http://aquarius.franken.de/docs/develop/gnuwin32/GNUWin32.txt
(Package Porting Notes)
ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin32/
(German mirror)
http://www.dol.ru/users/valtul (Valery Tulnikov - software ports)
ftp://ftp.cs.nyu.edu/pub/local/fox/cygwin32 (David fox - RPM packages)
http://www.itribe.net/virtunix/winhelp-man-pages/ (HTML Man Pages)
Help for Win32 Beginners:
http://www.relisoft.com
http://www.program.com/resources/win32.html
DISCLAIMER: These links or links from these pages to other sites do
not constitute an endorsement of any entities, advertisers, products
or services therein. I am not responsible for and do not control or
monitor the content of these sites or the accuracy of information
found therein.
-------------------- IMPORTANT UPGRADE NOTICE ------------------------
You should get the following to update your cygwinb19 package:
Sergey Okhapkin's coolview package which contains an updated
cygwinb19.dll. (Yes, even if you've already downloaded the b19.1
update from the Cygnus Site).
Mumit Khan's compilation of EGCS for the cygwinb19.dll; especially if
you're using the C++ compiler. The current version of the compiler
that
comes with the tools has lots of problems that have been fixed with
the EGCS version. This is a drop-in replacement for the GCC toolset.
URL's are listed above.
-----------------------------------------------------------------------
_________________________________________________________
DO YOU YAHOO!?
Get your free @yahoo.com address at http://mail.yahoo.com
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".
- Raw text -