[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