Thread overview | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
February 14, 2016 wrapSocket for socket_t? As wrapFile for FILE* | ||||
---|---|---|---|---|
| ||||
Hi! Anyone seen Socket constructor which uses already available socket of socket_t type? I am need to use already connected socket imported from C library without closing them after using. |
February 14, 2016 Re: wrapSocket for socket_t? As wrapFile for FILE* | ||||
---|---|---|---|---|
| ||||
Posted in reply to Beginner-8 | On Sunday, 14 February 2016 at 04:13:12 UTC, Beginner-8 wrote: > Anyone seen Socket constructor which uses already available socket of socket_t type? See the list on my unofficial docs here: http://dpldocs.info/experimental-docs/std.socket.Socket.html This one does it: http://dpldocs.info/experimental-docs/std.socket.Socket.this.5.html or the official docs here: http://dlang.org/phobos/std_socket.html#.Socket.this.3 But basically you can just do: auto socket = new Socket(your_socket_t, AddressFamily.INET); // or whatever it is AddressFamilies are: http://dpldocs.info/experimental-docs/std.socket.AddressFamily.html |
February 14, 2016 Re: wrapSocket for socket_t? As wrapFile for FILE* | ||||
---|---|---|---|---|
| ||||
Posted in reply to Beginner-8 | On Sunday, 14 February 2016 at 04:13:12 UTC, Beginner-8 wrote:
> Hi!
>
> Anyone seen Socket constructor which uses already available socket of socket_t type?
>
> I am need to use already connected socket imported from C library without closing them after using.
One of the constructors of class Socket is as follows:
pure nothrow @nogc @safe this(socket_t sock, AddressFamily af);
socket_t is basically a file descriptor which is the type "int".
Your C library provides you "socket_t" value already as far as I understand.
So, you can pass it to constructor.
Unless you explicitly call "close" method of Socket object, its descriptor will
stay allocated for your process/program.
|
February 14, 2016 Re: wrapSocket for socket_t? As wrapFile for FILE* | ||||
---|---|---|---|---|
| ||||
Posted in reply to tcak | On Sunday, 14 February 2016 at 06:01:11 UTC, tcak wrote: > Unless you explicitly call "close" method of Socket object, its descriptor will > stay allocated for your process/program. Hmm, I am seen what Socket dtor contains close() too: https://github.com/D-Programming-Language/phobos/blob/master/std/socket.d#L2659 |
February 14, 2016 Re: wrapSocket for socket_t? As wrapFile for FILE* | ||||
---|---|---|---|---|
| ||||
Posted in reply to Beginner-8 | On Sunday, 14 February 2016 at 06:10:04 UTC, Beginner-8 wrote: > On Sunday, 14 February 2016 at 06:01:11 UTC, tcak wrote: > >> Unless you explicitly call "close" method of Socket object, its descriptor will >> stay allocated for your process/program. > > Hmm, I am seen what Socket dtor contains close() too: > > https://github.com/D-Programming-Language/phobos/blob/master/std/socket.d#L2659 I would say that the socket should not be closed by my code. For files this way is wrapFile: "The resulting File never takes the initiative in closing the file." http://dlang.org/library/std/stdio/file.wrap_file.html It seems that something like this is necessary also for Socket. |
February 14, 2016 Re: wrapSocket for socket_t? As wrapFile for FILE* | ||||
---|---|---|---|---|
| ||||
Posted in reply to Beginner-8 | (I went to make a patch to Phobos) |
February 13, 2016 Re: wrapSocket for socket_t? As wrapFile for FILE* | ||||
---|---|---|---|---|
| ||||
Posted in reply to Beginner-8 | On 02/13/2016 10:38 PM, Beginner-8 wrote:
> On Sunday, 14 February 2016 at 06:10:04 UTC, Beginner-8 wrote:
>> On Sunday, 14 February 2016 at 06:01:11 UTC, tcak wrote:
>>
>>> Unless you explicitly call "close" method of Socket object, its
>>> descriptor will
>>> stay allocated for your process/program.
>>
>> Hmm, I am seen what Socket dtor contains close() too:
>>
>> https://github.com/D-Programming-Language/phobos/blob/master/std/socket.d#L2659
>>
>
> I would say that the socket should not be closed by my code.
>
> For files this way is wrapFile: "The resulting File never takes the
> initiative in closing the file."
> http://dlang.org/library/std/stdio/file.wrap_file.html
>
> It seems that something like this is necessary also for Socket.
>
Maybe another option is to duplicate the socket handle before giving it to Socket but I am failing to find a definitive answer or an example.
Ali
|
February 14, 2016 Re: wrapSocket for socket_t? As wrapFile for FILE* | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Sunday, 14 February 2016 at 07:33:11 UTC, Ali Çehreli wrote: > Maybe another option is to duplicate the socket handle Sure! Nevertheless, it is need method for socket_t duplication. Something like: class Socket { ... static Socket dup(socket_t) ... } > before giving it to Socket but I am failing to find a definitive answer or an example. |
February 14, 2016 Re: wrapSocket for socket_t? As wrapFile for FILE* | ||||
---|---|---|---|---|
| ||||
Posted in reply to Beginner-8 | Uh, wait! Forgot about that Socket calls .close() in its dtor |
February 14, 2016 Re: wrapSocket for socket_t? As wrapFile for FILE* | ||||
---|---|---|---|---|
| ||||
Posted in reply to Beginner-8 | On 02/14/2016 12:03 AM, Beginner-8 wrote:
> Uh, wait! Forgot about that Socket calls .close() in its dtor
Try duplicating the socket handle before handing it over to Socket (not compiled nor tested):
import core.sys.posix.unistd;
Socket(dup(myHandle))
I think socket handles are duplicatable :p things. Only the last close() would actually close the socket.
Ali
|
Copyright © 1999-2021 by the D Language Foundation