[Bug 6415] New: windows web server app fails to send more than
11680 bytes !?
Wine Bugs
wine-bugs at winehq.org
Mon Oct 9 15:16:57 CDT 2006
http://bugs.winehq.org/show_bug.cgi?id=6415
Summary: windows web server app fails to send more than 11680
bytes !?
Product: Wine
Version: 0.9.22.
Platform: PC
OS/Version: Linux
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: wine-net
AssignedTo: wine-bugs at winehq.org
ReportedBy: idc-dragon at gmx.de
I'm testing a windows app I'd very much like to run under Wine being in touch
with the author. This is a small web server app (called WRC, for web remote
center) based on the Microsoft MFC sample app HTTPSVR. It happily works under
Windows, but that'd be the wrong thing for running it 24/7. ;-)
It's not yet working under Wine, fails to serve larger files, but we've pretty
much narrowed down the problem by adding logs to the app and using ethereal.
For example, the app tries to write a 25017 bytes .jpg image to the socket, but
the socket only allows 11680 bytes at a time, and the TCP stack fragments this
in 8 packets of 1460 bytes, presumably because it only has 8 buffers reserved.
So far so good.
We see them being sent on the Ethernet and the ACK's are coming in, but
after these 8 packets there should be a signal to trigger the OnSend
function of the app so it can send the next part of data, but this never
happens... The reselection of the socket did not return an error. Given the
reselection is ok, and at the Ethernet level messages are consistently sent and
ACK's received, the conclusion is that there might be a bug in Wine. So here we
are stuck.
The error is very simple, WRC server processes a request and builds a response
in a memory buffer called m_buf (member of CRequestSocket).
In case an image is requested it will realloc the buffer and read the complete
image into the buffer, setting m_cbOut to the number of bytes in m_buf which
are to be sent.
After this the AsyncSelect( FD_WRITE | FD_CLOSE ) member of CRequestSocket is
called to initiate the writing of data to the network, this in done by
MFC/Windows calling the OnSend member whenever the underlying socket is able to
handle data.
In this function we send data and check for an error, a partial send or a
complete send. Every time a partial send is completed the AsyncSelect( FD_WRITE
| FD_CLOSE ) is repeated so MFC/Windows will get back to us when data is sent
on the network, and this seems to fail.
So have a look at the code in "if ( nBytes < m_cbOut )", this is what is being
executed when we see that only 11680 of the 25017 bytes are sent.
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
More information about the wine-bugs
mailing list