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

Steve Schveighoffer schveiguy at yahoo.com
Mon Mar 29 03:40:55 PDT 2010


I have no problem with Adam joining.  As far as the network library, do we want to increase our dependency on the C FILE* structure/api?  I would not want that.  I don't know a lot of network solutions that put a socket fd inside a FILE *, there's probably good reason for that.

As long as there's a non-buffered solution that allows socket-like functions accessible, I'm cool with File wrapping a socket.  That is, there should be a way to create a socket with the API that doesn't use File.

I hope we will eventually get a D-only solution for File.  Good news is, any future improvements to File automatically translate to what Adam is working on.

-Steve



----- Original Message ----
> From: Andrei Alexandrescu <andrei at erdani.com>
> To: Discuss the phobos library for D <phobos at puremagic.com>
> Sent: Sun, March 28, 2010 7:21:20 PM
> Subject: [phobos] Fwd: [Issue 4025] New: Making network with the std.stdio.File interface
> 
> 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: 
> ymailto="mailto:d-bugmail at puremagic.com" 
> href="mailto:d-bugmail at puremagic.com">d-bugmail at puremagic.com
Organization: 
> Digital Mars
To: 
> href="mailto:digitalmars-d-bugs at puremagic.com">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: 
> href="mailto:nobody at puremagic.com">nobody at puremagic.com
    
>     ReportedBy: 
> href="mailto:destructionator at gmail.com">destructionator at gmail.com


--- 
> Comment #0 from Adam D. Ruppe <
> href="mailto:destructionator at gmail.com">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

> href="mailto:phobos at puremagic.com">phobos at puremagic.com
http://lists.puremagic.com/mailman/listinfo/phobos


      


More information about the phobos mailing list