[fpc-pascal] How to close TInetServer without except?

Ludo Brands ludo.brands at free.fr
Sun May 5 09:53:13 CEST 2013


On 05/04/2013 09:59 PM, Zaher Dirkey wrote:

> now in this example
> http://msdn.microsoft.com/en-us/library/windows/desktop/ms737526%28v=vs.85%29.aspx
> They not use Select before acce​pt
>

If you are happy with accept blocking or if you use non-blocking sockets
you don't need select before accept.


> and in
> http://msdn.microsoft.com/en-us/library/windows/desktop/ms740141%28v=vs.85%29.aspx
> 
>>The parameter /readfds/ identifies the sockets that are to be checked
> for readability. If the socket is currently in the *listen*
> <http://msdn.microsoft.com/en-us/library/windows/desktop/ms739168%28v=vs.85%29.aspx>
> state, it will be marked as readable if >an incoming connection request
> has been received such that an *accept*
> <http://msdn.microsoft.com/en-us/library/windows/desktop/ms737526%28v=vs.85%29.aspx>
> is guaranteed to complete *without blocking*.
> 

That is exactly the purpose of select. The timeout guarantees that your
program stays alive and can do something else.

> I still not sure in windows need Select, but maybe in Linux only, but i
> can't test it there.
> 

I repeat, you don't have to use select in Windows or Linux. If you
prefer blocking sockets you don't need select but accept/recv/send will
block. If you use non-blocking sockets you need to deal with EAGAIN or
EWOULDBLOCK (WSAEWOULDBLOCK on windows). There are also alternatives to
select: poll, epoll, libevent, etc., etc. on linux, WSAPoll on windows
Vista and later. For completeness, on windows you have also the
asynchronous overlapped IO mode which is used a lot in high performance
servers but rather complex to program.

Ludo



More information about the fpc-pascal mailing list