Re: cvs socket extension

From: Date: Mon, 23 Jul 2001 21:57:44 +0000
Subject: Re: cvs socket extension
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-60795@lists.php.net to get a copy of this message
On Mon, Jul 23, 2001 at 11:15:49PM +0200, Stig Venaas wrote : > On Mon, Jul 23, 2001 at 05:16:13PM +0200, Markus Fischer wrote: > > On Mon, Jul 23, 2001 at 07:20:34AM -0700, Chris Vandomelen wrote : > > > > Since socket_select() always wants highest +1, couldn't this be > > > > implemented into socket_select() to go through all socket sets > > > > and get the number itself ? > > Why all sets? Isn't it enough to use max for the set that got passed to > socket_select()? > > > > The best way around this (IMHO) is to define a php_fd_set something like: > > > > > > struct php_fd_set { > > > fd_set the_set; > > > int max_fd; > > > }; > > > > Btw, is this really enough information ? > > Yes, that's my doubt as well, I'm not sure how much of a problem > it is though. > > > Consider this: > > You use FD_SET() to add a socket to the set (you just bump_up > > max_fd if socket > max_Fd) > > > > But when using FD_CLR() to remove a socket how do we know > > which socket in this set has the highest number now > > and whats the number anyway (beside 42) then ? > > > > Seems like we need a list for every set containing the current > > socket numbers in the set (if I'm not totally wrong :) because > > AFAIK if you don't keep a list of the numbers of a set without > > brute force you can't retrieve the list. > > In order to be portable we can't inspect the actual bits in the > set I think, so the only way I see is to have a list of the > numbers. So for every call to socket_fd_set(), you add to the > list, and in socket_fd_clear() you remove. In order to not look > for max every time you call select, you might also store the > max somewhere maybe. I think you should have one such list per > set, and create an empty list in socket_fd_alloc(). Chris mentioned something that its not needed to restore the last highest value for the max_fd if you drop the current highest one. This makes me wondering why we not ever pass something like 0xffffffff to select() [of course there is some legal reason not to do this, i'm just curious now]. One the other hand, Daniel [afaik??] suggested to let the user retrieve the handle id for a socket and calculate the hightest value on its own. Something like $fd = socket_get_fd( $socket); comes into my mind. The first one would be more nice for the users while the later is much less programming effort :-) I'm just wondering if there can be ever any drawback if we don't let the user specify the first parameter to the select() call. As I'm not an expert I can't tell. regards, Markus -- Markus Fischer, http://guru.josefine.at/~mfischer/ EMail: mfischer@guru.josefine.at PGP Public Key: http://guru.josefine.at/~mfischer/C2272BD0.asc PGP Fingerprint: D3B0 DD4F E12B F911 3CE1 C2B5 D674 B445 C227 2BD0

« previous php.dev (#60795) next »