Hello all.
I am trying to run ScimoreDB database which uses fibers, non-blocked IO for sockets and files, and completion port. It did started ok under 0.9.5 and seems it is working!!!:), so I would like to verify few things about async IO with completion ports before recompiling it with winelib.
1) will write/read file/socket with completion port is true asynchronous operation. I am asking because every time write/read operation returns true, and never IO pending error.
2) possible bug: the server sends 1500 bytes with WsaSend ( with 2 WSABUFFER ) and the client receive only 1452 bytes and calls WsaRecv again. Also on the server, the completion port receive event that transferred 1452 bytes. However, the last 8 bytes are never sends nor completion port event arrives. Is it perhaps something to do with the VMWare tool where I run Ubuntu 7.10?
Please, send me an info also to my mail: marius@scimore.com , because I might miss the answer here.
Thank you!
Marius Slyzius
Scimore UAB
(+45) 40862122
Marius Slyzius wrote:
Hello all.
I am trying to run ScimoreDB database which uses fibers, non-blocked IO for sockets and files, and completion port. It did started ok under 0.9.5 and seems it is working!!!:), so I would like to verify few things about async IO with completion ports before recompiling it with winelib.
You mean 0.9.50, right?
- will write/read file/socket with completion port is true
asynchronous operation. I am asking because every time write/read operation returns true, and never IO pending error.
Not sure it is asynchronous for files, should be asynchronous for sockets.
- possible bug: the server sends 1500 bytes with WsaSend ( with 2
WSABUFFER ) and the client receive only 1452 bytes and calls WsaRecv again. Also on the server, the completion port receive event that transferred 1452 bytes. However, the last 8 bytes are never sends nor completion port event arrives. Is it perhaps something to do with the VMWare tool where I run Ubuntu 7.10?
WsaSend can send partial data when operating on non-blocking socket; from your description it looks like this is the case. Is this error reproducible with the same numbers every run? Your both questions are actually not about IOCP but about asynchronous I/O support.
Please, send me an info also to my mail: marius@scimore.com , because I might miss the answer here.
Thank you!
Marius Slyzius
Scimore UAB
(+45) 40862122
On Dec 3, 2007, at 4:05 PM, Andrey Turkin wrote:
Marius Slyzius wrote:
- possible bug: the server sends 1500 bytes with WsaSend ( with 2
WSABUFFER ) and the client receive only 1452 bytes and calls WsaRecv again. Also on the server, the completion port receive event that transferred 1452 bytes. However, the last 8 bytes are never sends nor completion port event arrives. Is it perhaps something to do with the VMWare tool where I run Ubuntu 7.10?
WsaSend can send partial data when operating on non-blocking socket; from your description it looks like this is the case. Is this error reproducible with the same numbers every run? Your both questions are actually not about IOCP but about asynchronous I/O support.
My brain may be misfiring, but isn't 1452 bytes a common MTU size? Are your client and server remote from one another? In that case, your client may really be receiving 1452 data bytes first, with the rest coming a (very) short while later.
-Ken
Ken Thomases wrote:
On Dec 3, 2007, at 4:05 PM, Andrey Turkin wrote:
Marius Slyzius wrote:
- possible bug: the server sends 1500 bytes with WsaSend ( with 2
WSABUFFER ) and the client receive only 1452 bytes and calls WsaRecv again. Also on the server, the completion port receive event that transferred 1452 bytes. However, the last 8 bytes are never sends nor completion port event arrives. Is it perhaps something to do with the VMWare tool where I run Ubuntu 7.10?
WsaSend can send partial data when operating on non-blocking socket; from your description it looks like this is the case. Is this error reproducible with the same numbers every run? Your both questions are actually not about IOCP but about asynchronous I/O support.
My brain may be misfiring, but isn't 1452 bytes a common MTU size? Are your client and server remote from one another? In that case, your client may really be receiving 1452 data bytes first, with the rest coming a (very) short while later.
Yes, 1452 is a common MTU, but I recommend setting 576 or smaller for testing of lines. You MAY encounter problems sending exactly 1500 bytes over old style 10Base systems, too. It may be necessary to pad on send to a different number and then remove the padding on receipt.
James