[phobos] Fwd: [Issue 4025] New: Making network with the std.stdio.File interface
Lars Tandle Kyllingstad
lars at kyllingen.net
Wed Apr 7 02:09:35 PDT 2010
Sorry, I totally forgot to answer this one. I don't know if I've earned
the right to vote here yet, but if so I vote 'yes'. (Or was it 'yarrrr'?)
Regarding the use of std.stdio.File: Though I agree with Steve that a
native D solution for buffered IO would be way better than relying on
FILE*, I really like the *interface* of File. (In particular, I like
the byLine and byChunk ranges.)
And that's really all we need to worry about at the moment -- find a
good interface now, improve the implementation later. A good interface
should be as implementation independent as possible, so there will be
minimal breakage to user code later.
-Lars
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