Re: How to cancel select() call ?




"kamil" <kamildobk@xxxxxxxxxxxxxxxxx> wrote in message
news:u8U%23E26mHHA.960@xxxxxxxxxxxxxxxxxxxxxxx
I have to release any mutex before I enter select() and during that time,
after releasing mutex and before entering select(), socket can be closed by
my application because of an event, and immediately after that another
socket, with the same descriptor, can be created by other thread / there
are a few, completely independent threads, which create sockets in my
application /, and that / random / socket will be added to select().


You've got a valid idea. select will quit when any of the sockets passed in
is closed. To solve your problem, consider that select will also quit when
any of the sockets passed in becomes readable, writable, accepts a
connection, etc. Therefore, connect to the socket instead of closing it.
Your socket descriptor is never released, and therefore can't be confused
with another one.



Kamil

U¿ytkownik "Arkady Frenkel" <arkadyf@xxxxxxxxxxxxxxxx> napisa³ w
wiadomo¶ci news:OZbAb65mHHA.568@xxxxxxxxxxxxxxxxxxxxxxx
Why ? "after select() exits and before I create disposable socket again
there is a time when socket descriptor will be invalid." - is place for
mutex and OTOH use the same mutex to enter the code which create socket
Arkady

"kamil" <kamildobk@xxxxxxxxxxxxxxxxx> wrote in message
news:%234$xQP4mHHA.4624@xxxxxxxxxxxxxxxxxxxxxxx
But there is no good place to put that mutex - in this case I won't
close any socket by accident but, instead of this, I can add a random
socket to select() set.

Kamil


U¿ytkownik "Arkady Frenkel" <arkadyf@xxxxxxxxxxxxxxxx> napisa³ w
wiadomo¶ci news:ezSHSXqmHHA.568@xxxxxxxxxxxxxxxxxxxxxxx
Use sync object ( mutex ) in this case to allow main thread to
reallocate
socket before other thread will try to do the same
Arkady

"kamil" <kamildobk@xxxxxxxxxxxxxxxxx> wrote in message
news:en7llYkmHHA.5024@xxxxxxxxxxxxxxxxxxxxxxx
I found some cross-platform network library for RTP/RTCP protocol. It
works well, but I have one problem - it uses select() in its main loop.
I need a way to cancel select() call from another thread as fast as
possible when some events in my application are invoked ( to make a new
connection ). I know that I can add 'disposable socket' to a socket
set and close it when I want select to be cancelled, but I'm not sure
if it is completely safe method. Lets say my event loop looks like
this:

create_disposable_socket()
while()
{
select()
if ( myevent ) <--------------------- insafe, socket descriptor
invalid ?????
{
create_disposable_socket_again();
handle_my_app_events()
}
else
{
handle_network_events();
}
}

But after select() exits and before I create disposable socket again
there is a time when socket descriptor will be invalid. What if some
other thread create socket which reuse the same descriptor - it can be
closed because my application thread still thinks that it is a
disposable socket created to cancel select !
Is it possible or am I missing something ?

Thanks you in advance,
Kamil











.



Relevant Pages

  • Re: Damn you, FEDEX! or Nikon D40 lost in Springfield, MO blackhole.
    ... the 2 mp Mavica he had been using with a Nikon D40. ... After shopping around, he got me to order one for him. ... The shipper had it insured, but from what I have read it could take weeks to sort this crap out. ... You may get your insurance from FedEx and a couple weeks later they find it and deliver it. ...
    (alt.photography)
  • Re: Issues related with server architechture
    ... > I am working for an server application, ... > require information to the clients back. ... like one thread will be for main socket ... > find which socket is readable using a loop from MIN socket descriptor ...
    (comp.unix.programmer)
  • tcp socket problems
    ... socket programming. ... When we reach closeand it sets the errno to EBADF, ... I reuse that socket descriptor. ...
    (comp.unix.programmer)
  • Issues related with server architechture
    ... I am working for an server application, ... like one thread will be for main socket ... for ACCEPTING the new connections, and for each new connection again ... find which socket is readable using a loop from MIN socket descriptor ...
    (comp.unix.programmer)
  • Re: How to cancel select() call ?
    ... Microsoft MVP, MCSD ... after releasing mutex and before entering select, socket can be closed ... there is a time when socket descriptor will be invalid." ... But after selectexits and before I create disposable socket again ...
    (microsoft.public.win32.programmer.networks)