aio_connect ?
Julian Elischer
julian at elischer.org
Wed Oct 20 14:37:58 PDT 2004
Igor Sysoev wrote:
>On Sun, 17 Oct 2004, Ronald F. Guilmette wrote:
>
>
>
>>I'm sitting here looking at that man pages for aio_read and aio_write,
>>and the question occurs to me: ``Home come there is no such thing as
>>an aio_connect function?''
>>
>>There are clearly cases in which one would like to perform reads
>>asynchronously, but likewise, there are cases where one might like
>>to also perform socket connects asynchronously. So how come no
>>aio_connect?
>>
>>
>
>In FreeBSD you can do connect() on the non-blocking socket, then set
>the socket to a blocking mode, and post aio_read() or aio_write()
>operations on the socket.
>
>FreeBSD allows to post AIO operaitons on non-connected socket.
>NT (and W2K, I believe) do not. This is why ConnectEx() appeared in XP.
>I do not know about other OSes, but I belive only FreeBSD and NT have
>the kernel level AIO sockets implementation without the threads emulation
>in the user level (Solaris) or without the quietly falling to synchronous
>behaviour (Linux).
>
>While the developing my server nginx, I found the POSIX aio_* operations
>uncomfortable. I do not mean a different programming style, I mean
>the aio_read() and aio_write() drawbacks - they have no scatter-gather
>capabilities (aio_readv/aio_writev) and they require too many syscalls.
>E.g, the reading requires
>*) 3 syscalls for ready data: aio_read(), aio_error(), aio_return()
>*) 5 syscalls for non-ready data: aio_read(), aio_error(),
> waiting for notification, then aio_error(), aio_return(),
> or if timeout occuired - aio_cancel(), aio_error().
>
>I think aio_* may be usefull for the zero-copy sockets, however,
>FreeBSD's aio_write() does not wait when the data would be acknowledged
>by peer and notifies the completion just after it pass the data to
>the network layer.
>
Now that we have real threads, it shuld be possible to write an aio
library that is
implemented by having a bunch of underlying threads..
>
>
>Igor Sysoev
>http://sysoev.ru/en/
>_______________________________________________
>freebsd-net at freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-net
>To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"
>
>
More information about the freebsd-net
mailing list