Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
February 15, 2011 Sending a socket to another thread | ||||
---|---|---|---|---|
| ||||
I'd like to modify the listener sample to handle requests in separate threads but I'm experiencing weird crashes. Once a connection is established can I send() the relevant socket to another thread and receive() from there? Thanks |
February 15, 2011 Re: Sending a socket to another thread | ||||
---|---|---|---|---|
| ||||
Posted in reply to lurker | On Tue, Feb 15, 2011 at 12:00 PM, lurker <lurker@mailinator.com> wrote: > I'd like to modify the listener sample to handle requests in separate threads but I'm experiencing weird crashes. What platform and version of DMD? There was a bug in the Socket implementation on Windows recently where the WinSock data was either initialized or deinitialized multiple times. I don't remember the details, but I remember having "weird crashes." > > Once a connection is established can I send() the relevant socket to > another thread and receive() from there? Yes, I've done this in the past. |
February 15, 2011 Re: Sending a socket to another thread | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrew Wiley | > What platform and version of DMD? There was a bug in the Socket implementation on Windows recently where the WinSock data was either > initialized or deinitialized multiple times. I don't remember the details, but I remember having "weird crashes." Yes, Windows + dmd 2.51. > Yes, I've done this in the past. Great. At least is posible. Do you have an example available somewhere? It would really help Thanks |
February 15, 2011 Re: Sending a socket to another thread | ||||
---|---|---|---|---|
| ||||
Posted in reply to lurker Attachments: | On Tue, Feb 15, 2011 at 4:13 PM, lurker <lurker@mailinator.com> wrote: >> What platform and version of DMD? There was a bug in the Socket implementation on Windows recently where the WinSock data was > either >> initialized or deinitialized multiple times. I don't remember the details, but I remember having "weird crashes." > > Yes, Windows + dmd 2.51. I looked it up, and that bug was fixed in 2.50, so that's not the problem. > >> Yes, I've done this in the past. > > Great. At least is posible. Do you have an example available somewhere? It would really help Actually, I lied, I was getting sockets and spawning new threads with them as arguments. However, the attached source compiles and runs on Linux (although it doesn't do any sort of cleanup when it exits, so I can get errors on the bind call that the address is in use). Disclaimer: I'm not sure whether casting to and away from shared like I do is actually safe, so hopefully someone more knowledgeable can chime in on that. From a type standpoint, as long as ownership of the socket is passed between threads cleanly and only one thread can access the socket at a time, nothing odd should happen, but I'm not sure how/if TLS and the actual details of shared could break this. I'll see what I can dig out as far as that goes. |
February 15, 2011 Re: Sending a socket to another thread | ||||
---|---|---|---|---|
| ||||
On Tue, Feb 15, 2011 at 4:59 PM, Andrew Wiley <debio264@gmail.com> wrote:
> On Tue, Feb 15, 2011 at 4:13 PM, lurker <lurker@mailinator.com> wrote:
>>> What platform and version of DMD? There was a bug in the Socket implementation on Windows recently where the WinSock data was
>> either
>>> initialized or deinitialized multiple times. I don't remember the details, but I remember having "weird crashes."
>>
>> Yes, Windows + dmd 2.51.
>
> I looked it up, and that bug was fixed in 2.50, so that's not the problem.
>>
>>> Yes, I've done this in the past.
>>
>> Great. At least is posible. Do you have an example available somewhere? It would really help
>
> Actually, I lied, I was getting sockets and spawning new threads with
> them as arguments.
> However, the attached source compiles and runs on Linux (although it
> doesn't do any sort of cleanup when it exits, so I can get errors on
> the bind call that the address is in use).
> Disclaimer:
> I'm not sure whether casting to and away from shared like I do is
> actually safe, so hopefully someone more knowledgeable can chime in on
> that. From a type standpoint, as long as ownership of the socket is
> passed between threads cleanly and only one thread can access the
> socket at a time, nothing odd should happen, but I'm not sure how/if
> TLS and the actual details of shared could break this. I'll see what I
> can dig out as far as that goes.
>
TDPL seems to say that casting away shared is alright - just make sure it isn't ever actually shared between threads and you should be fine.
|
Copyright © 1999-2021 by the D Language Foundation