Bugs in libsocket 0.7.4

Bug 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

31 bug(s) found


Bug 1: UDP broadcast fails with Winsock 1.1
Bug 2: Weak pragma errors when compiling with gcc 2.95.x
Bug 3: UDP support hopelessly broken
Bug 4: IPX support
Bug 5: wsock interface: WsControl() code not working
Bug 6: wsock interface: vdhcp.vxd code not working
Bug 7: csock interface: No out-of-band data support
Bug 8: wsock interface: Incomplete support for OOB data
Bug 9: DXE support
Bug 10: Add support for routing tables
Bug 11: Add support for MS-DOS
Bug 12: libsocket 0.7.4 beta 3 (& earlier?) has broken assembly code
Bug 13: unix interface: Check mailslot names fit to 8+3 convention
Bug 14: Document debugging options in resolver
Bug 15: wsock interface: SO_LINGER support broken?
Bug 16: csock interface: close() always closes forcibly
Bug 17: Test multicast capability
Bug 18: Test suite needed
Bug 19: bindist and srcdist targets for automatically making distributions
Bug 20: csock interface: getsockopt() doesn't support SO_ERROR
Bug 21: Implement sendmsg(), recvmsg()
Bug 22: wsock interface: Can it use Winsock 2's wsock2.vxd?
Bug 23: Document loopback network - 127.0.0.0/8
Bug 24: Add to FAQ: How to use library without actually installing it
Bug 25: Generalise MSG_PEEK support
Bug 26: Generalised socket functions: getaddrinfo(), gai_strerror(), freeaddrinfo()
Bug 27: select() with socket fd + fileno(stdin) doesn't complete on keypress
Bug 28: csock interface: Blocks on recv(), recvfrom() after ~64K data received?
Bug 29: unix interface: Local mailslots can loose data?
Bug 30: libsocket fails to detect Windows version under Windows NT
Bug 31: libsocket programs crash on exit on Windows NT


Bug 1: UDP broadcast fails with Winsock 1.1

Version: The development

Created: 1999-11-26 20:01:10
Priority: P2
Severity: major
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: Windows 95

1999-11-26 20:01:10: Richard Dawe <richdawe@bigfoot.com>

Reported by Boris Pereira:

the udp broadcast packet under win95 (winsock 1.1) don't work it return : a
error but doing strerror it say no error ?!

Rich Dawe's thoughts:

- Maybe we need to set SO_BROADCAST on socket before trying? Since broadcast is
conventionally allowed by default for UDP socket (IIRC). With the csock
interface (sock.vxd), broadcast is allowed by default. Maybe this isn't the case
for wsock interface (wsock.vxd).

- The datagram socket handling is flaky anyhow - is this an artifact of this?

TOC


Bug 2: Weak pragma errors when compiling with gcc 2.95.x

Version: The development

Created: 1999-11-27 02:20:01
Priority: P4
Severity: minor
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: FIXED

Component: sources
Platform: PC
Operating System: Windows 98

1999-11-27 02:20:01: Richard Dawe <richdawe@bigfoot.com>

Yoni Ribalsky reported this:

I`m trying to install lsck0743 and after command "make -f makefile.src all" the
build failles with error message

l_herrno.c:12: warning: ignoring pragma: _h_errno
l_herrno.c:19: warning: ignoring pragma: __normal_h_errno_location

Richard Dawe comments:

I asked Yoni which version of gcc, DJGPP he was using, but I received no
response. I obtained these errors using gcc 2.95.2 + DJGPP 2.02. They occur with
source files in src/inet/, which use #pragma weak to allow user programs to
overload functions in the resolving code. gcc has an weak attribute now, so that
should be used instead.

This error actually occurs for ~10 files.

The impact of this bug is likely to be minimal.

1999-12-18 02:08:59: Richard Dawe <richdawe@bigfoot.com>

This was fixed by changing '#pragma weak' to '__attribute__ ((weak, alias("")))'. gcc 2.95.x doesn't like pragmas very much. It does have a switch
to allow the weak pragmas, but since libsocket only compiles with gcc, it seems
better to use the attribute method.

2000-03-11 14:48:59: Richard Dawe <richdawe@bigfoot.com>

This problem later resurfaced when I tried cross-compiling with egcs-2.91.66
19990314 (egcs-1.1.2 release) on Linux. This generated errors rather than
warnings. The solution was to remove all weak pragmas. This is unlikely to have
any serious impact, because the weak pragmas were there to allow threading
libraries to override the built-in functions. It is likely that libsocket will
have to be majorly rewritten to work with any threading libraries, so this isn't
really a problem.

As part of the removal of weak pragmas, I implemented readv(), writev() calls.

TOC


Bug 3: UDP support hopelessly broken

Version: The development

Created: 1999-11-27 14:05:30
Priority: P1
Severity: blocker
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: Windows 98

1999-11-27 14:05:30: Richard Dawe <richdawe@bigfoot.com>

Reported by Gillius:

After doing some testing on libsocket, I found some errors.  I will note
that I believe my code is not at fault because the code of the program
will compile directly under Linux and run properly.  Luckily I was able
to use a linux to act both as server and client to test how far each
side would go.

Summary:
accept() on server-side is broken, and does not properly initalize the
port, and does not return an ERROR.  Later calls to the socket return an
invalid file descriptor error (ENOENT).

select() on client side (using stdin and a UDP socket) fails by giving
the error (ENOTCONN), transport endpoint is not connected.

What happens and when:

Server and client on Windows 98:
Server loads and runs fine until client connects, then server returns
ENOENT error which kicks the client out of the blocking recv() and
terminates.

Server (linux) and client (98):
Server and client connect using TCP/IP correctly and terminate.  Server
proceeds normally on Linux as select() returns an error trying to listen
to stdin and the UDP socket connected to the server.

Server (98) and client (linux):
Server returns ENOENT error which closes the connection (and therefore
generates obvious error client-side during a recv(), terminating
client).

It seems there's an error on initalizing sockets or something in the
library since ENOTCONN from the client on select() (this is the sockets
first use since connect() which does not return an error), and the
ENOENT from the server's recv() seem to be related.

---

Richard Dawe asked for some clarification from Gillius and got some:


> I've read your bug report and I'm slightly confused. IIRC you are using
> both datagrams and streams.

Okay this is what goes down.  The server listens on two ports at once, a
TCP/IP port and a UDP port.  Remember this program was meant to simulate
my game environment so this is why it's setup this way.  The clients
logon to the server using the TCP/IP port, where speed is of less
concern than guaranteed data.  After handshaking and communicating data
back and forth, the client closes the TCP/IP connect and opens up the
UDP connect to the server.  When the server hears something on the UDP
port it broadcasts it to all of the listeners.

> > select() on client side (using stdin and a UDP socket) fails by giving
> > the error (ENOTCONN), transport endpoint is not connected.
>
> I couldn't duplicate this - see the attached programs udpcli2.c and
> udpserv.c. I've also attached the Makefile, although this will need some
> editing (remove ref's to udpcli, change -I and -L paths to point at your
> libsocket directories, if you haven't installed it) Do these programs work
> for you? I can't remember if I tested against udpserv, but I believe this
> isn't particularly relevant to the problem. Run udpcli2 and just leave it
> going. It doesn't seem to return an error. Pressing a key doesn't seem to
> break out of the loop for me. Weird.

I tested it and ran both udpserv and udpcli at the same time.  udpserv
never asked for a port, and I gave udpcli the loopback address with just
some port I made up.  Udpcli happily created wonderfully timed periods
for me whilst udpserv did nothing at all.  Neither program quit with the
press of a key or ctrl-break, so I had to force end task.

---

Richard Dawe comments:

I seem to recall that this is with the wsock interface. I am sure I asked for
clarification about that, but I can't seem to find a mail with it in!

TOC


Bug 4: IPX support

Version: The development

Created: 1999-11-27 14:11:55
Priority: P5
Severity: enhancement
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: MS-DOS

1999-11-27 14:11:55: Richard Dawe <richdawe@bigfoot.com>

Boris Pereira requested IPX support (PF_IPX/AF_IPX) a long time ago for Doom
Legacy. Since there isn't much free documentation on the Internet about IPX,
this may tricky. Linux's has support for IPX - look at its headers to see what
sort of structures are necessary.

I have some QuickBASIC, Turbo Pascal and C code that interfaces with the Netware
IPX DOS interrupts. This is provided by Windows '95/'98's networking to DOS
boxes, once you've checked an option in the networking configuration.

TOC


Bug 5: wsock interface: WsControl() code not working

Version: The development

Created: 1999-11-27 14:16:48
Priority: P4
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: Windows 95

1999-11-27 14:16:48: Richard Dawe <richdawe@bigfoot.com>

Most of wsock.vxd is partially documented by the WSOCK.VXD Pseudo-Documentation.
However, one of its most intriguingly named interfaces, WsControl(), is almost
totally unknown. Alfons Hoogervorst produced a document for the undocumented
WINSOCK.DLL interface WsControl(), listing data structures, etc. I attempted to
implement the equivalent call via wsock.vxd, but it does not quite work. It also
seems to corrupt the stack.

If this interface could be deduced, then the IP addresses, etc. for each
interface could be discovered more simply than walking the registry - they would
simply be listed in a data structure.

2000-03-11 14:50:59: Richard Dawe <richdawe@bigfoot.com>

I actually have info and example code on how to use the WsControl() interface
from Win32 programs. Perhaps this will provide clues as to how the VxD should be
called?

TOC


Bug 6: wsock interface: vdhcp.vxd code not working

Version: The development

Created: 1999-11-27 14:21:17
Priority: P4
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: Windows 95

1999-11-27 14:21:17: Richard Dawe <richdawe@bigfoot.com>

In Alfons Hoogervorst's document ipdata.txt (see the development home page), he
describes an interface in vdhcp.vxd that allows the dial-up adapter's IP address
to be discovered. Since this is the only type of address that libsocket can't
find automatically, it would be good if the interface could be used.

Currently libsocket has some code that attempts this in src/win9x/w9x_vdhc.c.
Unfortunately, the code corrupts the stack, which causes libsocket to behave
erratically and crash in most cases. I wonder if this is an artifact of the bugs
in the assembler before the patch for gcc 2.95.x?

TOC


Bug 7: csock interface: No out-of-band data support

Version: The development

Created: 1999-11-27 14:26:55
Priority: P4
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: Windows 95

1999-11-27 14:26:55: Richard Dawe <richdawe@bigfoot.com>

The csock interface uses sock.vxd from the Coda Network File System project to
provide TCP/IP and UDP/IP protocol support. sock.vxd has no concept of
out-of-band data (*).

(*) OOB data can be sent/received using the MSG_OOB data flag or using the
SO_OOBINLINE socket option. OOB data for TCP is a packet sent with the urgent
bit set.

Since OOB data is generally frowned upon by the experts in the
comp.os.ms-windows.programmer.winsock newsgroup, perhaps this isn't such a bad
thing.

1999-12-18 02:34:59: Richard Dawe <richdawe@bigfoot.com>

According to TCP/IP Illustrated Volume 1, out of band data is different to
urgent data. OOB data should be sent down a separate channel, e.g. another TCP
connection. The BSD boys and gals decided to implement OOB transmission by
(mis)using the urgent flag in TCP packets.

TOC


Bug 8: wsock interface: Incomplete support for OOB data

Version: The development

Created: 1999-11-27 14:42:17
Priority: P4
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: Windows 95

1999-11-27 14:42:17: Richard Dawe <richdawe@bigfoot.com>

The wsock interface uses wsock.vxd to provide TCP/IP and UDP/IP services. It
supports the OOB options on calls like send(), setsockopt(), etc. Thus, you can
send and receive OOB data. There are some problems in the implementation:

1. If you have set the socket option SO_OOBINLINE, there is currently no support
for sockatmark() to determine if you are at an OOB mark. The sockatmark() call
is in src/oob.c - this may change at a later date.

2. You can set a SIGURG handler, but it will never be called. There is no
support for a callback from wsock.vxd. I think this would be needed to then
signal SIGURG. Each interface has a non-blocking check function, that checks for
completion of non-blocking calls. Maybe this could be adapted to check for OOB
data too - i.e. by performing the appropriate ioctl, if SO_OOBINLINE is set? The
extra VxD calls might not be great for performance though...

Another question is whether OOB is actually supported - I've never tried it, and
I don't remember anyone telling me they had tried it. Maybe Phillipe Hanrigou
did once?

TOC


Bug 9: DXE support

Version: The development

Created: 1999-11-27 14:45:52
Priority: P5
Severity: enhancement
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: All

1999-11-27 14:45:52: Richard Dawe <richdawe@bigfoot.com>

DXEs are dynamically loadable libraries for DJGPP. I seem to recall that the
mechanism generally only works for simple libraries, which libsocket clearly is
not. It may be worth investigating one day though. A different DLL solution may
be better, such as the one being developed as part of the X-Windows for DOS
project.

TOC


Bug 10: Add support for routing tables

Version: The development

Created: 1999-11-27 14:47:57
Priority: P4
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: All

1999-11-27 14:47:57: Richard Dawe <richdawe@bigfoot.com>

libsocket is going to need support for routing tables at some point, especially
when DOS support is added. The BSD ioctls for querying routing tables should be
supported too.

TOC


Bug 11: Add support for MS-DOS

Version: The development

Created: 1999-11-27 14:51:03
Priority: P2
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: MS-DOS

1999-11-27 14:51:03: Richard Dawe <richdawe@bigfoot.com>

DOS support should be added to libsocket, so that people don't need to make the
choice between networking libraries and don't need to recompile when they want
to run on DOS or Windows.

The current best solution would be to merge in some code from Watt-32. This is a
big task, since it has its own BSD layer, socket file descriptor handling, etc.
I envisage the best solution being a series of patches tracking the versions of
Watt-32, so you can download libsocket, download Watt-32, unzip Watt-32 into a
directory in the libsocket tree, apply patches, compile and run. It may not be
that simple ;)

TOC


Bug 12: libsocket 0.7.4 beta 3 (& earlier?) has broken assembly code

Version: The development

Created: 1999-11-27 14:55:24
Priority: P1
Severity: blocker
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: FIXED

Component: sources
Platform: PC
Operating System: All

1999-11-27 14:55:24: Richard Dawe <richdawe@bigfoot.com>

The gcc 2.95.x series of C compilers have stricter checking than earlier
versions (2.8.x, 2.7.x). One of the things that was tightened up was checking of
"spilled registers". Beta 3 has registers in the spill list that are assigned on
entry and exit of the assembly block. Putting them in the spill list informs gcc
that they should be saved. This is incorrect, since we are assigning them
values! Hence, the assembly is broken. Previously gcc didn't complain, even
though it should have done.

See the gcc FAQ for more details.

1999-11-27 14:57:59: Richard Dawe <richdawe@bigfoot.com>

This is fixed by a patch available here:

http://homepages.nildram.co.uk/~phekda/richdawe/lsck/lsck_new.htm#1999-11-24

TOC


Bug 13: unix interface: Check mailslot names fit to 8+3 convention

Version: The development

Created: 1999-11-27 15:03:17
Priority: P3
Severity: major
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: All

1999-11-27 15:03:17: Richard Dawe <richdawe@bigfoot.com>

The unix interface provides Unix domain socket support. It does this by using a
pair of LAN Manager mailslots. On Windows '95 anyone can create a mailslot with
any name they like. On Windows NT you need priveledges to create mailslots with
long filenames, but not to create ones that fit the 8+3 filename convention.
Presumably this is for backwards compatibility with DOS programs that are
unaware on Windows NT's security.

2000-03-11 15:42:59: Richard Dawe <richdawe@bigfoot.com>

I guess this should also cope with "SET LFN=N" under Windows '95, DOS. A tricky
problem is how to cope with communications between one DOS with LFN=N and
another with LFN=Y, with a filename that doesn't fit the 8+3 convention. I guess
the simple answer is not to and to have it as a limitation.

I wonder what the behaviour is on Win2K?

2000-06-03 01:37:59: Richard Dawe <richdawe@bigfoot.com>

This should be addressed for 0.7.4 beta 5 / release.

TOC


Bug 14: Document debugging options in resolver

Version: The development

Created: 1999-11-27 15:05:47
Priority: P3
Severity: minor
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: FIXED

Component: documentation
Platform: PC
Operating System: All

1999-11-27 15:05:47: Richard Dawe <richdawe@bigfoot.com>

I've found the resolver's debugging options to be particularly helpful when, er,
debugging UDP support. They can also be useful if you're not sure if you've set
your DNS settings properly.

2000-03-11 15:07:59: Richard Dawe <richdawe@bigfoot.com>

This is described in the user's guide (redist/u-guide.txt).

TOC


Bug 15: wsock interface: SO_LINGER support broken?

Version: The development

Created: 1999-11-27 15:13:45
Priority: P3
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: FIXED

Component: sources
Platform: PC
Operating System: Windows 95

1999-11-27 15:13:45: Richard Dawe <richdawe@bigfoot.com>

The socket option SO_LINGER option takes a "struct linger" as its argument. This
contains two "int" arguments. Unfortunately, the size of an int is compiler
dependent - for DJGPP's gcc port its a long integer, 32 bits or 4 bytes.

It is less clear what it should be for the structure passed to wsock.vxd.
wsock.vxd first appeared in the days of Windows 3.x, so it could be 16 bits, but
the networking drivers are 32-bit so it's more likely to be 32 bits too. I did
some test a while back and the structure appeared to contain two 2 byte ints.
That is, the returned data from getsockopt() made more sense as a 2 * 2 byte
structure than it did as a 2 * 4 byte structure.

However, I've experienced GPFs when using SO_LINGER and the 4-byte _total_ size
structure, so maybe I was wrong in my testing?

I don't know what impact this has had on anyone, since no-one has reported any
problems on this matter to me.

1999-12-24 11:19:59: Richard Dawe <richdawe@bigfoot.com>

I discovered that the 'struct linger' structure should use short unsigned ints.
After removing the code from getsockopt(), setsockopt() to "interpret" this
stucture from the input/output parameters, SO_LINGER support seemed to work.
Whether it lingers or not is another question, but it seems that you can set
lingering OK.

TOC


Bug 16: csock interface: close() always closes forcibly

Version: The development

Created: 1999-11-27 15:22:10
Priority: P2
Severity: critical
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: WONTFIX

Component: sources
Platform: PC
Operating System: Windows 95

1999-11-27 15:22:10: Richard Dawe <richdawe@bigfoot.com>

The csock interface's helper VxD, sock.vxd, has a bug in its close routine. It
always forcibly closes a TCP connection.

On a close(), a TCP packet with the RST bit set in the header is sent to the
other end to close the connection. The normal method is to set the FIN bit,
which leads to a negociated end of connection. Sending a RST means that the
normal acknowledgement mechanism is not used, so any data waiting to be sent is
just discarded. This is clearly not what you would want in most cases.

The current close() code is OK for things like HTTP, but it completely kills FTP
sessions.

I ported a Linux program called sitecopy for uploading web pages, etc. to an FTP
site. FTP uses a control connection and a data connection, i.e. 2 TCP
connections. It connects to the control, opens a data connection, transfers
data, etc. OK until the data connection is closed. The FTP session then fails,
because the data connection was forcibly closed.

The sock.vxd sources do have some comments in the sys_close() in socket.c (Coda
sources, not libsocket!). It has some graceful disconnect code commented out,
suggesting that it doesn't work. Maybe with a little work this could be fixed?
Unfortunately I don't have the Win95 DDK, so I can't try modifying and compiling
a fix. Maybe later I can obtain a copy.

2000-03-11 15:10:59: Richard Dawe <richdawe@bigfoot.com>

Unfortunately this is out of my control. I did manage to build sock.vxd from the
sources using MS Visual C++ 6 and the Windows 98 DDK (some mods were necessary),
but I could not fix the problem myself. Unless the Coda people sort this out,
this bug will remain in libsocket's Winsock 2 support (unless an alternative
method is found/ implemented).

TOC


Bug 17: Test multicast capability

Version: The development

Created: 1999-11-27 15:24:33
Priority: P4
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: All

1999-11-27 15:24:33: Richard Dawe <richdawe@bigfoot.com>

Winsock can support multicast - there are several MS Knowledge Base articles on
it - but I have never tried it. csock currently has no support for multicast,
i.e. the socket options are not presently supported.

TOC


Bug 18: Test suite needed

Version: The development

Created: 1999-11-27 15:25:40
Priority: P2
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: All

1999-11-27 15:25:40: Richard Dawe <richdawe@bigfoot.com>

libsocket needs a test suite, so I can do regression testing on the fixes.
Currently it's difficult to tell if I've broken anything between fixes/patches.

2000-03-11 15:12:59: Richard Dawe <richdawe@bigfoot.com>

Work has begun, but many, many more tests and some kind of testing strategy are
needed.

TOC


Bug 19: bindist and srcdist targets for automatically making distributions

Version: The development

Created: 1999-11-27 15:28:05
Priority: P3
Severity: enhancement
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: FIXED

Component: sources
Platform: PC
Operating System: All

1999-11-27 15:28:05: Richard Dawe <richdawe@bigfoot.com>

Making distributions is hassle. Add some targets for doing this automagically.
This should probably include a test build to check that everything needed is
present in the distribution.

Maybe I'm getting lazy in my old age ;)

2000-05-29 10:20:59: Richard Dawe <richdawe@bigfoot.com>

I am just being lazy. Use the install target to create the binaries for
distribution! The source distribution isn't very much hassle compared with
binaries anyway.

TOC


Bug 20: csock interface: getsockopt() doesn't support SO_ERROR

Version: The development

Created: 1999-11-27 15:41:32
Priority: P3
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: Windows 95

1999-11-27 15:41:32: Richard Dawe <richdawe@bigfoot.com>

The socket option SO_ERROR is read-only and contains the current error status of
the socket. Since sock.vxd does not provide a getsockopt() interface, this must
be emulated by the internals of libsocket. It may, in fact, be better to put
this in a generic getsockopt() handler, because SO_TYPE is already emulated by
the csock interface. This could be similar in which the ioctlsocket() and
fcntlsocket() functions have emulation routines.

1999-11-27 15:42:59: Richard Dawe <richdawe@bigfoot.com>

SO_ACCEPTCONN and SO_BROADCAST could also be emulated.

1999-12-24 11:22:59: Richard Dawe <richdawe@bigfoot.com>

After reading Stevens's book on Unix Network Programming, it seems I have
misinterpreted the meaning of SO_ERROR. It's only the error value of pending I/O
operations. So, normally you should not need to use it, because errno will
contain the error code for the last socket option. Just a misinterpretation.

TOC


Bug 21: Implement sendmsg(), recvmsg()

Version: The development

Created: 1999-11-27 15:46:57
Priority: P5
Severity: enhancement
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: All

1999-11-27 15:46:57: Richard Dawe <richdawe@bigfoot.com>

Traditionally send(), recv() are implemented using sendto(), recvfrom(), which
are in turn implemented using sendmsg(), recvmsg(). The latter functions are
substantially more complicated than sendto(), recvfrom(). They can use
scatter-gather I/O.

For completeness, it would be nice to have these functions. Linux has some man
pages on these functions + cmsg.

This is something to do on a rainy day, when I have nothing better to do and I
feel like breaking all the code I've (possibly) just got working ;)

TOC


Bug 22: wsock interface: Can it use Winsock 2's wsock2.vxd?

Version: The development

Created: 1999-11-27 15:50:58
Priority: P3
Severity: enhancement
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: Windows 95

1999-11-27 15:50:58: Richard Dawe <richdawe@bigfoot.com>

Recently on the dossock mailing list (http://www.bigfoot.com/~richdawe/dossock/)
it was reported that wsock2.vxd could be used to create sockets, etc. in a
similar method to that used with wsock.vxd. The main difference appears to be
that everything is carried out asynchronously. Hopefully this will soon be
resolved, so that code can be put into libsocket to use wsock2.vxd. I think the
only thing remaining to discover is how to use the send/receive routines.

TOC


Bug 23: Document loopback network - 127.0.0.0/8

Version: The development

Created: 1999-11-27 15:52:02
Priority: P3
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: FIXED

Component: documentation
Platform: PC
Operating System: All

1999-11-27 15:52:02: Richard Dawe <richdawe@bigfoot.com>

This might be useful for TCP/IP newbies.

2000-06-03 01:33:59: Richard Dawe <richdawe@bigfoot.com>

This is documented in the info docs. It'll probably be moved around over time,
though.

TOC


Bug 24: Add to FAQ: How to use library without actually installing it

Version: The development

Created: 1999-11-27 15:52:44
Priority: P2
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: NEW
Resolution:

Component: documentation
Platform: PC
Operating System: All

Add to FAQ: How to use library without actually installing it

TOC


Bug 25: Generalise MSG_PEEK support

Version: The development

Created: 1999-11-27 15:57:34
Priority: P2
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: All

1999-11-27 15:57:34: Richard Dawe <richdawe@bigfoot.com>

The csock interface currently contains support for "faking" MSG_PEEK support.
This should be generalised to _all_ interfaces. This might make it easier to add
support for MSG_WAITALL too. The motivation for doing this is that the wsock
interface could then support MSG_WAITALL, which is does not currently.

Generalising the MSG_PEEK code would also tidy it up - it's currently a mess. It
currently doesn't support multiple sources either. I think it should be switched
to a linked-list, so the details of each peeked block can be stored along with
the block.

Additionally, Winsock's MSG_PEEK and FIONREAD support is broken (source: Winsock
Programmer's FAQ, Winsock programmers' newsgroup. If we can emulate this using
non-blocking reads and peek buffers, then that's a bonus.

2000-03-11 15:17:59: Richard Dawe <richdawe@bigfoot.com>

I have some ideas on this - it should be implemented as part of a generic layer,
using the same interface as csock, wsock, unix. This would have functions
prefixed __lsckg. This would support more than just MSG_PEEK, MSG_WAITALL - it
could include the emulation of fcntl(), ioctl(), which are currently implemented
in the fcntlsocket_emulated() and ioctlsocket_emulated() functions.

This generic interface would only be used in cases where an interface such as
csock did not have the required capabilities to support the operation. The
capability bits have been added to libsocket 0.7.4 beta 4, but are currently
unused. The use of capability bits will also allow us to get round bugs in the
low-level drivers, because we can pretend that the low-level driver doesn't
support a certain operation (e.g. MSG_PEEK) if it's broken (e.g. MSG_PEEK with
Winsock).

TOC


Bug 26: Generalised socket functions: getaddrinfo(), gai_strerror(), freeaddrinfo()

Version: The development

Created: 1999-11-27 16:00:04
Priority: P5
Severity: enhancement
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: All

1999-11-27 16:00:04: Richard Dawe <richdawe@bigfoot.com>

These functions were suggested to add support for IPv6 and other protocols to
the standard socket functions. The current IPv4 functions just won't cope with
IPv6. libsocket is unlikely to support IPv6, but it would be a good idea to add
these functions for future-proofing as people switch to IPv6 - OK, this is a
long way off, which is why this is low priority.

1999-11-27 16:00:59: Richard Dawe <richdawe@bigfoot.com>

getnameinfo() should be implemented by the same illogic.

TOC


Bug 27: select() with socket fd + fileno(stdin) doesn't complete on keypress

Version: The development

Created: 1999-11-27 16:03:39
Priority: P2
Severity: major
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: NEW
Resolution:

Component: sources
Platform: PC
Operating System: All

1999-11-27 16:03:39: Richard Dawe <richdawe@bigfoot.com>

When a program is testing the keyboard buffer and a socket for readiness, the
select() call never completes on a keypress. It does work for sockets when data
is received. Maybe the select call blocks for too long in the VxD, so the
keypress data is lost? This seems implausible.

This occurred with the wsock interface. I can't recall whether on not it did for
csock - it needs more testing.

1999-12-18 02:14:59: Richard Dawe <richdawe@bigfoot.com>

I discovered my test program was defective (doh). Pressing a key does cause
select() to signal input readiness. However, I do remember Jason Winnebeck
saying that he had had problems with select() and stdin, so I'll leave this open
for now.

TOC


Bug 28: csock interface: Blocks on recv(), recvfrom() after ~64K data received?

Version: The development

Created: 1999-11-27 16:09:26
Priority: P1
Severity: critical
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: Windows 95

1999-11-27 16:09:26: Richard Dawe <richdawe@bigfoot.com>

Using the test program httpget, I find that requesting a web page > 64K (*)
causes httpget to block indefinitely. This occurs no matter how big the buffer
is (I've tried from 1 byte (**) up to 128K in various sizes) or whether the
socket is non-blocking or not. Using a 1K block size, you can see that it seizes
at 64K. By coincidence, the receive buffer size in sock.vxd is 64K - except in
one case where it's ~4K, but I'm not sure how often the case is. This seems to
suggest that there are buffer handling bugs in sock.vxd

(*) I use the DJGPP FAQ in HTML form.
(**) If you're silly enough to try a 1-byte buffer, then your computer will
crash and burn.

I have reported this problem to the Coda Network File System guys, but they have
not replied to my messages. Without any debugging tools or the Win95 DDK, it's
hard to see what the problem is. The sock.vxd sources _looked_ OK, but there's
clearly something wrong.

2000-03-11 15:20:59: Richard Dawe <richdawe@bigfoot.com>

I have deferred this, because it's a definite problem. Maybe there is some way
around it? If I can't fix this in libsocket, then this bug will remain, in the
same way as the forced closure of TCP/IP sockets by SOCK.VXD.

This bug is completely reproducible from me on Winsock 1.1 - not sure what
happens with Winsock 2.

TOC


Bug 29: unix interface: Local mailslots can loose data?

Version: The development

Created: 1999-11-27 16:26:53
Priority: P2
Severity: critical
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: LATER

Component: sources
Platform: PC
Operating System: Windows 95

1999-11-27 16:26:53: Richard Dawe <richdawe@bigfoot.com>

The Unix domain socket interface, unix, currently assumes that there is no data
loss when using local mailslots. This may or may not be the case (*). There is
currently a limit on the amount of data that can be queued on a mailslot (almost
64K, the maximum mailslot buffer size). So, it is possible that data loss could
occur, regardless of whether the mailslot is reliable.

(*) There may be a limit on the number of queued messages. There appears to be
one on Windows NT. I once tried a Denial Of Service (DOS) attack on one of my
flatmates using a program that sent WinPopup-format messages to his NT box.
After ~15 unread messages he did not receive any more. He then launched a reply
DOS on my Win95 box, which almost completely killed it, because there didn't
appear to be a similar limit on Win95. I couldn't kill WinPopup, because of
Win95's lacklustre multitasking.

The unix interface's messages should have sequence numbers, a la TCP, to recover
from data loss. This should make it easier to implement some of the other
features of sockets too.

2000-06-03 01:41:59: Richard Dawe <richdawe@bigfoot.com>

This could be sorted out post-0.7.4 release. For the moment I haven't seen data
loss. Really more testing is needed.

TOC


Bug 30: libsocket fails to detect Windows version under Windows NT

Version: The development

Created: 1999-12-09 21:55:34
Priority: P4
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: RESOLVED
Resolution: FIXED

Component: sources
Platform: PC
Operating System: Windows NT

1999-12-09 21:55:34: Richard Dawe <richdawe@bigfoot.com>

libsocket's wsock & csock modules use INT 0x2F, AX=0x160A to detect the version
of Windows that it's running under. This is used by the code to load the
appropriate VxD and display appropriate debugging output. This call fails (well,
returns no version information) for Windows NT. There is another function,
AX=0x1600, that may yield the Windows version in more cases.

2000-03-11 15:21:59: Richard Dawe <richdawe@bigfoot.com>

I no longer have (practical) access to Windows NT, so I can't really test the
fixes I put in.

2000-03-11 15:23:59: Richard Dawe <richdawe@bigfoot.com>

Oops, I haven't actually fixed it, just put Windows NT version detection in. I
think the csock and wsock code will need to be updated to abort on detection of
Windows NT, to avoid crashes.

2000-04-25 13:34:59: Richard Dawe <richdawe@bigfoot.com>

Windows NT is now detected

TOC


Bug 31: libsocket programs crash on exit on Windows NT

Version: The development

Created: 1999-12-09 21:57:27
Priority: P2
Severity: normal
Assigned To: Richard Dawe <richdawe@bigfoot.com>
Status: NEW
Resolution:

Component: sources
Platform: PC
Operating System: Windows NT

1999-12-09 21:57:27: Richard Dawe <richdawe@bigfoot.com>

libsocket programs crash with a segfault on exit on Windows NT. The message
"General Protection Fault" is displayed. bfdsymify (a more advanced version of
symify) did not seem to display any debugging info, so more investigation is
needed to discover the cause of this bug.

2000-03-11 15:27:59: Richard Dawe <richdawe@bigfoot.com>

I no longer have (practical) access to Windows NT, so I can't really fix this.

2000-04-25 21:58:59: Richard Dawe <richdawe@bigfoot.com>

demo/diag.exe appears to crash in strerror().

TOC


Bug 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

31 bug(s) found


This page was generated on Sat Jul 27 07:51:22 2002 by bz_dumpbugs.pl.

bz_dumpbugs.pl, version 1.3, Copyright (C) 1999-2002 by Richard Dawe