[phobos] Fwd: [Issue 4025] New: Making network with the std.stdio.File interface

Walter Bright walter at digitalmars.com
Sun Mar 28 18:53:43 PDT 2010


Yes.

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: d-bugmail at puremagic.com
> Organization: Digital Mars
> To: digitalmars-d-bugs at puremagic.com
> 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: nobody at puremagic.com
>         ReportedBy: destructionator at gmail.com
>
>
> --- Comment #0 from Adam D. Ruppe <destructionator at gmail.com> 
> 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
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos
>
>


More information about the phobos mailing list