[gdc-0.24_3 on freebsd8current/amd64 ]can't run socket.connect
kevin
kevinxlinuz at 163.com
Sun Jun 8 13:12:16 PDT 2008
David Friedman Wrote:
> kevin wrote:
> > import std.socket;
> > import std.socketstream;
> >
> > int main()
> > {
> > Socket sock = new Socket(AddressFamily.INET, SocketType.STREAM,
> > ProtocolType.IP);
> > sock.connect(new InternetAddress("www.digitalmars.com", 80));
> > SocketStream ss = new SocketStream(sock);
> >
> > ss.writeString("GET /d/intro.html HTTP/1.1\r\n"
> > "Host: www.digitalmars.com\r\n"
> > "\r\n");
> >
> > while(ss.readLine().length) {} //skip header
> > while(!ss.eof())
> > {
> > char[] line;
> > printf("%.*s\n", ss.readLine());
> > }
> >
> > return 0;
> > }
> > ----------------------
> > I try to run this. I find it compile well.but when I run it., it core dump.
>
> Although the D spec says you can pass a string for a "%.*s" format, it
> really only works on 32-bit targets. The argument for '*' is of type
> 'int', not 'size_t'. On a 64-bit target, passing a char[] really passes
> a 'size_t' and 'char*', which is not what printf expects.
>
> To be portable, you have to do this:
>
> string s2 = ss.readline();
> printf("%.*s\n", cast(int) s2.length, s2.ptr);
>
> David
Sorry, I mean socket.connect can't work in freebsd 8/amd64.
........
writefln("Befor");
sock.connect(new InternetAddress("www.digitalmars.com", 80));
writefln("After");
I test this ,it just output "Befor" and then core dump.
(gdb)s
_D3gcx2GC8addRangeMFPvPvZv (this=@0x60e040, pbot=0x5386a8, ptop=0x551980)
at ../.././../gcc-4.1-20071105/libphobos/internal/gc/gcx.d:751
751 in ../.././../gcc-4.1-20071105/libphobos/internal/gc/gcx.d
(gdb) s
_D3gcx2GC8addRangeMFPvPvZv (this=Variable "this" is not available.
)
at ../.././../gcc-4.1-20071105/libphobos/internal/gc/gcx.d:748
748 in ../.././../gcc-4.1-20071105/libphobos/internal/gc/gcx.d
(gdb) s
Befor
Program received signal SIGABRT, Aborted.
0x0000000800b7947c in kill () from /lib/libc.so.7
More information about the D.gnu
mailing list