[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