Aye.

On Mar 28, 2010, at 4:21 PM, Andrei Alexandrescu wrote:

> I'm quite hopeful about this development. If we have anything for the network 
> in D2, that would be great, and integration with File will reuse a ton of 
> work.
> 
> I'm considering extending Adam an offer to join Phobos. He has donated a 
> Windows machine for building and running Phobos and generally seems to know 
> what he's talking about. If he'll join the project, my hope is to attract him 
> to dedicate more time to it.
> 
> Please cast your vote by replying (silence = abstaining, i.e. you're not for 
> or against).
> 
> 
> Andrei
> 
> -------- Original Message --------
> Subject: [Issue 4025] New: Making network with the std.stdio.File interface
> Date: Sun, 28 Mar 2010 22:51:45 +0000 (UTC)
> From: [email protected]
> Organization: Digital Mars
> To: [email protected]
> Newsgroups: digitalmars.D.bugs
> 
> http://d.puremagic.com/issues/show_bug.cgi?id=4025
> 
>           Summary: Making network with the std.stdio.File interface
>           Product: D
>           Version: 2.041
>          Platform: Other
>        OS/Version: Linux
>            Status: NEW
>          Severity: enhancement
>          Priority: P2
>         Component: Phobos
>        AssignedTo: [email protected]
>        ReportedBy: [email protected]
> 
> 
> --- Comment #0 from Adam D. Ruppe <[email protected]> 2010-03-28 
> 15:51:43 PDT ---
> I've written a small module that opens a network connection, then wraps it in
> the File struct, allowing you to use the byLine, etc., ranges on it, as well 
> as
> writef/readln/etc.
> 
> It is Linux only, but should be pretty easy to port to other operating 
> systems.
> Ideally, I'd like to eventually be able to use File for talking
> to processes too, on all D platforms.
> 
> Here's the code I have for now:
> 
> ==============
> 
> 
> 
> public import std.stdio;
> import std.string;
> 
> import std.conv;
> 
> version(linux):
> 
> import std.c.linux.linux;
> import std.c.linux.socket;
> 
> alias std.c.linux.socket sock;
> alias std.c.linux.linux linux;
> 
> enum int PF_INET = 2;
> enum int AF_INET = PF_INET;
> 
> extern(C) FILE* fdopen(int, const(char)*);
> 
> File openNetwork(string host, ushort port) {
>    hostent* h;
>    sockaddr_in addr;
> 
>    h = gethostbyname(std.string.toStringz(host));
>    if(h is null)
>        throw new StdioException("gethostbyname");
> 
>    int s = socket(PF_INET, SOCK_STREAM, 0);
>    if(s == -1)
>        throw new StdioException("socket");
> 
>    scope(failure)
>        close(s);
> 
>    addr.sin_family = AF_INET;
>    addr.sin_port = htons(port);
>    std.c.string.memcpy(&addr.sin_addr.s_addr, h.h_addr, h.h_length);
> 
>    if(sock.connect(s, cast(sockaddr*) &addr, addr.sizeof) == -1)
>        throw new StdioException("Connect failed");
> 
>    FILE* fp = fdopen(s, "w+".ptr);
> 
>    File f;
> 
>    auto imp = new File.Impl(fp, 1, host ~ ":" ~ to!string(port));
> 
>    f.p = imp;
> 
>    return f;
> }
> _______________________________________________
> phobos mailing list
> [email protected]
> http://lists.puremagic.com/mailman/listinfo/phobos

_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to